#include<iostream>
#include<vector>
#include<algorithm>
#include<stack>
#include<cstring>
using namespace std;
const int maxn=1e5+5;
vector<vector<int> >data;
int now[maxn],degree[maxn],sx=1;
stack<int>ans;
void dfs(int num)
{
int len=data[num].size();
for(int i=now[num];i<len;i=now[num])
{
now[num]=i+1;
dfs(data[num][i]);
}
ans.push(num);
}
int main()
{
int n,m,u,v;
scanf("%d%d",&n,&m);
data.resize(n+1);
while(m--)
{
scanf("%d%d",&u,&v);
data[u].push_back(v);
--degree[u];
++degree[v];
}
int num1=0,num2=0;
for(int i=1;i<=n;i++)
{
if(degree[i]==-1)
{
++num1;sx=i;
}
else if(degree[i]==1)++num2;
else if(degree[i]!=0)
{
printf("No\n");
return 0;
}
}
if(!(num1==1&&num2==1))
{
printf("No\n");
return 0;
}
for(int i=1;i<=n;i++)
{
sort(data[i].begin(),data[i].end());
}
dfs(sx);
while(!ans.empty())
{
printf("%d ",ans.top());
ans.pop();
}
}