/* Date: 2015/05/21 18:55:50 Thursday Author: xllend3 */ #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define X first #define Y second #define mp make_pair #define ph push #define pb push_back #define REP(i,a,n) for(int _tmp=n,i=a;i<=_tmp;++i) #define DEP(i,a,n) for(int _tmp=n,i=a;i>=_tmp;--i) #define rep(i,a,n) for(int i=(a);i<=(n);++i) #define dep(i,a,n) for(int i=(a);i>=(n);--i) #define ALL(x,S) for(__typeof((S).end()) x=S.begin();x!=S.end();x++) #define eps 1e-8 #define pi 3.1415926535897 #define sqr(x) ((x)*(x)) #define MAX(a,b) a=max(a,b) #define MIN(a,b) a=min(a,b) #define SZ(x) ((int)(x).size()) #define CPY(a,b) memcpy(a,b,sizeof(a)) #define CLR(a) memset(a,0,sizeof(a)) #define POSIN(x,y) (1<=(x)&&(x)<=n&&1<=(y)&&(y)<=m) #define all(x) (x).begin(),(x).end() #define COUT(S,x) cout< pii; typedef pair pll; typedef pair pff; typedef complex CD; const int inf=0x20202020; const int mod=1000000007; template inline void read(T&x){bool fu=0;char c;for(c=getchar();c<=32;c=getchar());if(c=='-')fu=1,c=getchar();for(x=0;c>32;c=getchar())x=x*10+c-'0';if(fu)x=-x;}; template inline void read(T&x,T&y){read(x);read(y);} template inline void read(T&x,T&y,T&z){read(x);read(y);read(z);} template inline void read(T&x,T&y,T&z,T&q){read(x);read(y);read(z);read(q);} const int DX[]={1,0,-1,0},DY[]={0,1,0,-1}; ll powmod(ll a,ll b) {ll res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll powmod(ll a,ll b,ll mod) {ll res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} //******************************************* const int N=111111,M=111111; int l,m,n,t,C,x,y; vectora[N]; int rd[N]; queueQ; int main(){ //ios::sync_with_stdio(false); #ifdef LOCAL freopen("A.in","r",stdin);//freopen("A.out","w",stdout); #endif while(scanf("%d%d",&n,&m)!=EOF){ rep(i,1,n)a[i].clear(),rd[i]=0; rep(i,1,m)scanf("%d%d",&x,&y),a[x].pb(y),rd[y]++; rep(i,1,n)if(!rd[i])Q.push(i); while(Q.size()){ int k=Q.front();Q.pop(); rep(i,0,SZ(a[k])-1)if(--rd[a[k][i]]==0)Q.push(a[k][i]); }int bo=0; rep(i,1,n)if(rd[i])bo=1; puts(!bo?"YES":"NO"); } return 0; }