#include <bits/stdc++.h>
using namespace std;
const int N = 100005,M = 200005;
int n,m,dp[N];
int head[N],tot;
struct node{
int next,to;
}eg[M];
void add(int a,int b){
eg[++tot].to = b,eg[tot].next = head[a],head[a] = tot;
}
queue<int> q;
int dis[N],in[N];
int topos[N];
void toposort()
{
int cnt = 0;
for(int i = 1;i <= n;i ++)
if(!in[i]){
q.push(i);
topos[++cnt] = i;
}
while(q.size()){
int x = q.front();
q.pop();
for(int i = head[x];i;i = eg[i].next){
int y = eg[i].to;
in[y] --;
if(in[y] == 0){
q.push(y);
topos[++cnt] = y;
}
}
}
return ;
}
int main()
{
cin >> n >> m;
int a,b;
for(int i = 1;i <= m;i ++){
cin >> a >> b;
add(a,b);
in[b] ++;
}
toposort();
for(int i = 1;i <= n;i ++)
dp[i] = 1;
for(int i = 1;i <= n;i ++){
int u = topos[i];
for(int j = head[u];j;j = eg[j].next){
int y = eg[i].to;
dp[y] = max(dp[y],dp[u]+1);
}
}
for(int i = 1;i <= n;i ++)
cout << dp[i] << "\n";
return 0;
}