#include <bits/stdc++.h>
using namespace std;
//variable
#define ld long double
#define ll long long
#define db double
#define ii pair<int,int>
#define f first
#define s second
#define mp make_pair
#define mt make_tuple
//vector
#define pb push_back
#define all(v) v.begin(),v.end()
#define len(a) (int)a.length()
#define sz(a) (int)a.size()
//mask
#define BIT(i) (1LL<<(i))
//better code, debugger
#define watch(n) cerr << #n << ": " << n << endl
#define debug(x) for (auto p: x) cerr<<p<<' ';cerr<<endl
#define forw(i,j,z) for(int i=(int)j;i<=(int)z;i++)
#define ford(i,j,z) for (int i=(int)j;i>=(int)z;i--)
#define fIlE "."
//auto seed = chrono::high_resolution_clock::now().time_since_epoch().count();
//mt19937 RAND(seed);
const int mod = 998244353;
inline int add(int u,int v){u+=v;if(u>=mod)u-=mod;return u;}
inline int dec(int u,int v){u-=v;if(u<0)u+=mod;return u;}
inline int mul(int u,int v){return (ll)u*v%mod;}
const ii inf = mp(-1, -1);
ii ans = inf;
const int N = 1e5 + 1;
int num[N], low[N];
vector<int> a[N];
int timedfs = 0, timedfs2 = 0;
int n, m;
stack<int> haha;
int id[N];
bool del[N];

void dfs(int u)
{
    num[u] = low[u] = ++timedfs;
    haha.push(u);
    for (int v : a[u]){
        if (del[v]) continue;
        if (!num[v]){
            dfs(v);
            low[u] = min(low[u], low[v]);
        }
        else low[u] = min(low[u], num[v]);
    }
    if (low[u] >= num[u])
    {
        int id_group = ++timedfs2;
        while(!haha.empty() && low[u] >= num[u])
        {
            int v = haha.top();
            del[v] = 1;
            haha.pop();
            id[v] = id_group;
            if (v == u) break;
        }
    }
}
void solve()
{
    cin >> n >> m;
    forw(i, 1, m){
        int u, v;
        cin >> u >> v;
        if (u == v) continue;
        a[u].pb(v);
    }
    forw(i, 1, n) if (!num[i])
        dfs(i);
    if (timedfs2 > 1){
        int u = 1;
        forw(v, 2, n) if (id[u] != id[v]){
            if (id[u] < id[v]) swap(u, v);
            cout << "NO\n";
            cout << v << ' ' << u;
            return;
        }
    }
    else cout << "YES";
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    if (fopen(fIlE"inp", "r"))
        freopen(fIlE"inp","r",stdin), freopen(fIlE"out","w",stdout);
    //time_t TIME_TU=clock();
    int t=1;
//    cin>>t;
    while(t--)
        solve();
    //time_t TIME_TV=clock();
    //cerr<<(db)(TIME_TV-TIME_TU)/CLOCKS_PER_SEC<<endl;
    return 0;
}
