#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i, n) for(int i = 0; i < n; ++i) #define REP1(i, a, n) for(int i = a; i <= n; ++i) #define REPD(i, n) for(int i = n; i >= 0; --i) bool MAP[110][110]; int indegree[110]; int n, m; typedef long long ll; bool topo() { queue que; REP1(i, 1, n) { if(indegree[i] == 0) que.push(i); } int tot = 0; while(!que.empty()) { int u = que.front(); que.pop(); tot++; REP1(i, 1, n) { if(MAP[u][i]) { indegree[i]--; if(indegree[i] == 0) que.push(i); } } } if(tot == n) return 1; else return 0; } int main() { #ifdef LOCAL freopen("in","r",stdin); #endif while(~scanf("%d%d", &n, &m)) { memset(MAP, 0, sizeof(MAP)); memset(indegree, 0, sizeof(indegree)); int a, b; REP(i, m) { scanf("%d%d", &a, &b); if(!MAP[b][a]) indegree[a]++; MAP[b][a] = 1; } if(topo()) puts("YES"); else puts("NO"); } return 0; }