RT
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int h[N],e[N],ne[N],idx;
int h1[N],e1[N],ne1[N],idx1;
int n,m,is_stk[N],f[N];
int stk[N],top,timestamp;
int id[N],scc_cnt,low[N];
int dfn[N],maxid[N];
void add(int a,int b){
e[idx] = b,ne[idx] = h[a],h[a] = idx++;
}
void add1(int a,int b){
e1[idx1] = b,ne1[idx1] = h1[a],h1[a] = idx1++;
}
void tarjan(int u){
dfn[u] = low[u] = ++timestamp;
is_stk[u] = 1,stk[++top] = u;
for(int i = h[u];i != -1;i = ne[i]){
int j = e[i];
if(!dfn[j]){
tarjan(j);
low[u] = min(low[u],low[j]);
}else if(is_stk[j]) low[u] = min(low[u],low[j]);
}
if(dfn[u] == low[u]){
int y;
scc_cnt ++;
do{
y = stk[top--];
is_stk[y] = 0;
id[y] = scc_cnt;
maxid[scc_cnt] = max(maxid[scc_cnt],y);
}while(u!=y);
}
}
int main() {
memset(h,-1,sizeof(h));
memset(h1,-1,sizeof(h1));
cin >> n >> m;
for(int i = 1;i <= m;i ++){
int x,y;
cin >> x >> y;
add(x,y);
}
for(int i = 1;i <= n;i ++)
if(!dfn[i]) tarjan(i);
// for(int i = 1;i <= scc_cnt;i ++)
// cout << maxid[i] << " ";
// cout << endl;
for(int i = 1;i <= n;i ++){
for(int j = h[i];j != -1;j = ne[j]){
if(id[i] != id[e[j]]){
add1(id[i],id[e[j]]);
}
}
}
for(int i = 1;i <= scc_cnt;i ++)f[i] = maxid[i];
for(int i = 1;i <= scc_cnt;i ++)
for(int j = h1[i];j != -1;j = ne1[j])
f[i] = max(f[i],maxid[e1[j]]);
for(int i = 1;i <= n;i ++)
cout << f[id[i]] << " ";
return 0;
}