#include <stdio.h>
#include <stdlib.h>
#define MAXS 2*100000+10
// 用邻接表是比较好的选择
typedef struct LinkTable{
int data;
struct LinkTable *next;
}LinkTable;
int main() {
int m,n;
scanf("%d%d\n",&n,&m);
LinkTable tab[MAXS];
// 初始化
for(int i=1;i<=n;i++){
tab[i].data=i;
tab[i].next=NULL;
}
// 输入数据
for(int i=1;i<=m;i++){
int x,y;
scanf("%d %d",&x,&y);
LinkTable *p=&tab[x];
while(p->next) p=p->next;
p->next=(LinkTable *)malloc(sizeof(LinkTable));
p->next->data=y;
p->next->next=NULL;
}
int queue[n+2],que=1,front=1,du[n+1];
for(int i=0;i<n+1;i++){
du[i]=0;
}
// 统计度数
for(int i=1;i<=n;i++){
LinkTable *p=&tab[i];
while(p->next) {
p=p->next;
du[p->data]++;
}
}
// 挑出度为0的顶点
for(int i=1;i<=n;i++) if(du[i]==0){queue[que++]=i;du[i]=-1;}
// 出队度为0 并删除
while(front!=que){
int i=queue[front++];
LinkTable *p=&tab[i];
while(p->next) {
p=p->next;
du[p->data]--;
}
// 这一步大部分节省时间
if(front==que)
for(int j=1;j<=n;j++)if(du[j]==0){queue[que++]=j;du[j]=-1;}
}
// 当队列满了之后 说明获取到了所有顶点 没有剩余
if(que==n+1) {
printf("%d",queue[1]);
for(int j=2;j<que;j++){
printf(" %d",queue[j]);
}
return 0;
}
printf("-1\n");
return 0;
}