#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 1e5 + 10;
int head[N],ver[N],vis[N],nxt[N],n,m,tot=0,maxn;
inline int read()
{
int x=0,w=1;
char c=getchar();
while (c>'9'||c<'0') {if (c=='-') w=-1; c=getchar();}
while (c<='9'&&c>='0') {x=(x<<1)+(x<<3)+c-'0'; c=getchar();}
return w*x;
}
void add(int u,int v)
{
ver[++tot]=v;
nxt[tot]=head[u];
head[u]=tot;
}
void dfs(int x)
{
if (vis[x]) return;
vis[x]=1;
for (int i=head[x];i;i=nxt[i])
{
int y=ver[i];
maxn=max(y,maxn);
if (vis[y]) continue;
dfs(y);
}
}
int main()
{
int u,v;
n=read(); m=read();
for (int i=1;i<=m;++i)
{
u=read(); v=read();
add(u,v);
}
for (int i=1;i<=n;++i)
{
memset(vis,0,sizeof(vis));
maxn=i;
dfs(i);
printf("%d ",maxn);
}
printf("\n");
return 0;
}