#include <bits/stdc++.h>

#pragma GCC optimize ("Ofast")
#pragma GCC optimize ("unroll-loops")
#pragma GCC target("avx,avx2,tune=native")
using namespace std;

typedef int ll;
typedef long double ld;

#define ff first
#define ss second
#define pb push_back
#define el "\n"
#define se " "

const ll N=1e5+9;
const ll INF=1e18;

ll n,m,a,b,c,d,k,kk,i,j,cnt,cnt1,res,res1,sum,sum1,val,cur;
ll predok[N];
bool used[N];
vector<ll>v[N],cyc;
//void dfs(ll x){
//    used[x]=1;
//    for(auto to:v[x]){
//        if(used[to]==0) dfs(to);
//    }
//}
//void DFS(ll x, ll cnt){
////    cerr<<x<<se<<cnt<<el;
//    if(k==1){
//        return ;
//    }
//    used[x]=1;
//    for(auto to:v[x]){
//        if(used[to]==0){
//            predok[to]=x;
//            if (res==1 || (double)clock()/(double)CLOCKS_PER_SEC>0.98) {res=1;return;}
//            DFS(to,cnt+1);
//        }
//        else{
//            if(to==1 && cnt==n){
////                cerr<<"WINNN"<<el;
//                k=1;
//                cyc.pb(to);
//                for(ll i=x;i!=to;i=predok[i]){
////                    cerr<<i<<se;
//                    cyc.pb(i);
//                }
//                cyc.pb(to);
//                reverse(cyc.begin(),cyc.end());
//                return ;
//            }
//        }
//    }
//    used[x]=0;
//}
int main()
{
    ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>n>>m;
    for(i=1;i<=m;i++){
        cin>>a>>b;
        v[a].pb(b);
    }
    cout<<"YES"<<el;
    cout<<1<<se;
    for(i=n;i>0;i--){
        cout<<i<<se;
    }
//    for(i=1;i<=n;i++){
//        if(used[i]==0){
//            if(cur==1){
//                return cout<<"NO",0;
//            }
//            else{
//                dfs(i),cur++;
//            }
//        }
//    }
//    memset(used,0,sizeof used);
//    DFS(1,1);
//    if(k==1){
//        cout<<"YES"<<el;
//        for(i=0;i<cyc.size();i++){
//            cout<<cyc[i]<<se;
//        }
//    }
//    else{
//        cout<<"NO";
//    }
}
