#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<iostream>
#include<queue>
#define rg register
using namespace std;
inline int read(){
rg int f=0,x=0;
rg char ch=getchar();
while(!isdigit(ch)) f|=(ch=='-'),ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return f?-x:x;
}
const int N =110;
const int M =220;
int n,m,head[N],tot,a[N],cnt,deg[N];
queue<int > q;
struct edge{
int to,nxt;
}e[M];
inline void add(int u,int v){
e[++tot].to=v;
e[tot].nxt=head[u];
deg[v]++;
head[u]=tot;
}
inline void topsort(){
for(rg int i=1;i<=n;++i) if(!deg[i]) q.push(i);
while(!q.empty()){
int u=q.front();
q.pop();
a[++cnt]=u;
for(rg int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(--deg[v]==0) q.push(v);
}
}
}
signed main(){
n=read(),m=read();
for(rg int i=1,u,v;i<=m;++i){
u=read(),v=read();
add(u,v);
}
topsort();
for(rg int i=1;i<=n;++i) printf("%d ",a[i]);
return 0;
}