#include<bits/stdc++.h>usingnamespace std;constint maxn =110;
vector<int> G[maxn];int inD[maxn];voidTopologicalSort(int n){
queue<int> q;for(int i =0; i < n;++i){if(inD[i]==0){
q.push(i);}}int num =0;while(!q.empty()){int now = q.front();
q.pop();
num++;for(int i =0; i < G[now].size();++i){int nex = G[now][i];
inD[nex]--;if(inD[nex]==0){
q.push(nex);}}}printf("%s\n", num == n ?"YES":"NO");}intmain(){int n, m;while(scanf("%d %d",&n,&m)!=EOF&& n !=0){for(int i =0; i < m;++i){int p1, p2;scanf("%d %d",&p1,&p2);
G[p1].push_back(p2);
inD[p2]++;}TopologicalSort(n);for(int i =0; i < n;++i) G[i].clear();memset(inD,0,sizeof(inD));}}