#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define de(x) cout<<x<<" ";
#define sf(x) scanf("%d",&x);
#define Pu puts("");
const int N=1e5+10;
int n,m;
int ans[N];
bool instack[N];
stack<int>st;
int dfn[N],low[N],tim;
int rep[N];
int tongkuai=0;
int belong[N];
int head[N],tot;
struct edge{
int from,to;
int nxt;
}e[N];
void add_edge(int u,int v){
tot++;
e[tot].from=u;e[tot].to=v;
e[tot].nxt=head[u];
head[u]=tot;
}
void targin(int x){
dfn[x]=low[x]=++tim;
instack[x]=1;
st.push(x);
for(int i=head[x];i;i=e[i].nxt){
int to=e[i].to;
if(dfn[to]==0){
targin(to);
low[x]=min(low[x],low[to]);
}else if(instack[to]){
low[x]=min(low[x],dfn[to]);
}
}
if(dfn[x]==low[x]){
tongkuai++;
int tmp=st.top(); st.pop();
while(tmp!=x){
instack[tmp]=0;
belong[tmp]=tongkuai;
rep[tongkuai]=max(rep[tongkuai],tmp);
tmp=st.top();st.pop();
}
instack[x]=0;
belong[x]=tongkuai;
rep[tongkuai]=max(rep[tongkuai],x);
}
}
void dfs(int x){
if(ans[x]) return ;
ans[x]=rep[x];
for(int i=head[x];i;i=e[i].nxt){
int to=e[i].to;
if(!ans[x]) dfs(to);
ans[x]=max(ans[x],ans[to]);
}
}
int main(){
cin>>n>>m;
int u,v;
for(int i=1;i<=m;i++){
sf(u)sf(v)
add_edge(u,v);
}
for(int i=1;i<=n;i++){
if(!dfn[i])
targin(i);
}
memset(head,0,sizeof(head));
tot=0;
for(int i=1;i<=m;i++){
u=e[i].from;v=e[i].to;
if(belong[u]==belong[v]) continue;
add_edge(belong[u],belong[v]);
}
for(int i=1;i<=tongkuai;i++){
if(!ans[i]) dfs(i);
}
for(int i=1;i<=n;i++){
printf("%d ",ans[belong[i]]);
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define de(x) cout<<x<<" ";
#define sf(x) scanf("%d",&x);
#define Pu puts("");
const int N=1e5+10;
int n,m;
vector<int>v[N];
int ans[N];
void bfs(int t,int u){
queue<int>q;
q.push(t);
while(q.size()){
int nw=q.front();q.pop();
ans[nw]=u;
for(int i=0;i<v[nw].size();i++){
if(ans[v[nw][i]]==0) q.push(v[nw][i]);
}
}
}
int main(){
cin>>n>>m;
int x,y;
for(int i=1;i<=m;i++){
sf(x)sf(y)
v[y].push_back(x);
}
for(int i=n;i>=1;i--){
if(ans[i]==0)
bfs(i,i);
}
for(int i=1;i<=n;i++){
printf("%d ",ans[i]);
}Pu;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define de(x) cout<<x<<" ";
#define sf(x) scanf("%d",&x);
#define Pu puts("");
const int N=1e5+10;
int n,m;
vector<int>v[N];
int ans[N];
void dfs(int t,int u){
if(ans[t]) return ;
ans[t]=u;
for(int i=0;i<v[t].size();i++){
dfs(v[t][i],u);
}
}
int main(){
cin>>n>>m;
int x,y;
for(int i=1;i<=m;i++){
sf(x)sf(y)
v[y].push_back(x);
}
for(int i=n;i>=1;i--){
dfs(i,i);
}
for(int i=1;i<=n;i++){
printf("%d ",ans[i]);
}Pu;
return 0;
}