#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+9;
vector<int>edge[maxn];
int a[maxn];
void dfs(int v,int maxx){
if(a[v])
return;
a[v]=maxx;
for(int i=0;i<edge[v].size();i++){
dfs(edge[v][i],maxx);
}
}
int main(){
int nv,ne;cin>>nv>>ne;
for(int i=1;i<=ne;i++){
int a,b;cin>>a>>b;
edge[b].push_back(a);
}
for(int i=nv;i>=1;i--){
dfs(i,i);
}
cout<<a[1];
for(int i=2;i<=nv;i++){
cout<<" "<<a[i];
}
return 0;
}
//逆向查找最大点 ,使用逆向思维时注意输入