1 //Accepted 3342 31MS 260K 1002 B G++
2 #include <stdio.h>
3 #include <string.h>
4 #define M 110
5 int g[M][M];
6 int q[M];
7 bool useif[M];
8 int n,m;
9 int topo()
10 {
11 int i,j,k,t;
12 memset(useif,0,sizeof(useif));
13 t = 0;
14 for(i=1;i<=n;i++)
15 {
16 bool flag = true;
17 for(j=1;j<=n;j++)
18 {
19 if(q[j] == 0 && useif[j] == 0 )
20 {
21 useif[j] = 1;
22 t ++;
23 for(k = 1; k <= n; ++k)
24 if(g[j][k] == 1)
25 q[k] --;
26 flag = false;
27 break;
28 }
29 }
30 if(flag) break;
31 }
32 if(t == n)
33 return 1;
34 else
35 return 0;
36 }
37 int main()
38 {
39 int a,b,i;
40 while(scanf("%d%d",&n,&m)!=EOF && n + m )
41 {
42 memset(g,0,sizeof(g));
43 memset(q,0,sizeof(q));
44 for(i=1;i<=m;i++)
45 {
46 scanf("%d%d",&a,&b);
47 a++;
48 b++;
49 if(g[a][b]==0) q[b]++;
50 g[a][b] = 1;
51 }
52 if (topo())
53 printf("YES\n");
54 else
55 printf("NO\n");
56 }
57 return 0;
58 }