#include <vector>
#include <list>
#include <map>
#include <set>
#include <string.h>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
#define LL long long
#define pi acos(-1)
#define N 5005
#define INF 999999999
#define eps 1e-8
//****************************************
//poj 2553
//Author: leolin
//****************************************
vector<int> v[N];
int ans[N];
stack<int> s;
bool vis[N];
bool inStack[N];
int low[N],dfn[N];
int belong[N];//属于哪个强连通分量
int out[N];
int n,m,step,t;
void init()
{
int i;
for(i=0;i<=n;i++)
{
v[i].clear();
}
while(!s.empty())s.pop();
}
void tarjan(int u)
{
vis[u]=true;
step++;
s.push(u);
inStack[u]=true;
low[u]=step,dfn[u]=step;
int i,j;
for(i=0;i<v[u].size();i++)
{
int x=v[u][i];
if(!vis[x])
{
tarjan(x);
low[u]=min(low[u],low[x]);
}
else
if(inStack[x])
low[u]=min(low[u],dfn[x]);
}
if(low[u]==dfn[u])
{
t++;
while(1)
{
int x=s.top();
s.pop();
belong[x]=t;
inStack[x]=false;//!!!!!!
if(x==u)break;
}
}
}
void solve()
{
if(t==1)
{
int i,j;
for(i=1;i<n;i++)
printf("%d ",i);
printf("%d\n",n);
}
else
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=0;j<v[i].size();j++)
{
int x=v[i][j];
if(belong[i]!=belong[x])
out[belong[i]]++;
}
}
int cnt=0;
for(i=1;i<=t;i++)
{
if(out[i]==0)
{
for(j=1;j<=n;j++)
if(belong[j]==i)
ans[cnt++]=j;
}
}
sort(ans,ans+cnt);
printf("%d",ans[0]);
for(i=1;i<cnt;i++)
printf(" %d",ans[i]);
printf("\n");
}
}
int main()
{
//freopen("a.txt","r",stdin);
while(scanf("%d",&n) && n)
{
scanf("%d",&m);
int i,j,k;
init();
while(m--)
{
int a,b;
scanf("%d%d",&a,&b);
v[a].push_back(b);
}
step=0,t=0;
for(i=0;i<=n;i++)
{
vis[i]=false;
inStack[i]=false;
belong[i]=0;
out[i]=0;
}
for(i=1;i<=n;i++)
{
if(!vis[i])
tarjan(i);
}
solve();
}
return 0;
}