#include<stdio.h>
#define NR 50001
long n,i,j,k,m,p[NR]={0},c[NR]={0},t=0,v[NR],d[NR]={0},f[NR]={0},x,y,a1[NR]={0},a2[NR]={0};
void merge(long f[NR],long v[NR],long p,long m,long q)
{long i=p,j=m+1,ny=p,y[NR],z[NR],k;
while(i<=m&&j<=q)
{if(f[i]<=f[j])
{y[ny]=f[i];
z[ny]=v[i];
ny++;
i++;}
else
{y[ny]=f[j];
z[ny]=v[j];
ny++;
j++;}}
while(i<=m)
{y[ny]=f[i];
z[ny]=v[i];
ny++;
i++;}
while(j<=q)
{y[ny]=f[j];
z[ny]=v[j];
ny++;
j++;}
for(k=p;k<=q;k++)
{f[k]=y[k];
v[k]=z[k];}}
void mergeSort(long f[NR],long v[NR],long p,long q)
{long m=(p+q)/2;
if(p<q)
{mergeSort(f,v,p,m);
mergeSort(f,v,m+1,q);
merge(f,v,p,m,q);}}
int find(long a1[NR],long a2[NR],long m,long i,long j)
{long k;
for(k=1;k<=m;k++)
if(a1[k]==i&&a2[k]==j)
return 1;
return 0;}
void explorare(long *t,long i)
{long j;
d[i]=++(*t);
c[i]=1;
for(j=1;j<=n;j++)
if(c[j]==0&&find(a1,a2,m,i,j)==1)
{p[j]=i;
explorare(t,j);}
c[i]=2;
f[i]=++(*t);}
int main()
{freopen("sortaret.in","rt",stdin);
freopen("sortaret.out","wt",stdout);
scanf("%ld %ld",&n,&m);
for(k=1;k<=m;k++)
scanf("%ld %ld",&a1[k],&a2[k]);
for(i=1;i<=n;i++)
v[i]=i;
for(i=1;i<=n;i++)
if(c[i]==0)
explorare(&t,i);
mergeSort(f,v,1,n);
for(i=n;i>=1;i--)
printf("%ld ",v[i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;}