#include <bits/stdc++.h>
using namespace std;
int bfs(vector <int>adj[],int start,int n)
{
bool visited[n+1];
memset(visited,0,sizeof(visited));
queue <int>q;
q.push(start);
int node,count=0;
while(!q.empty())
{
node=q.front();
q.pop();
visited[node]=1;
for(int i=0;i<adj[node].size();i++)
{
if(visited[adj[node][i]])return 0;
else
{
q.push(adj[node][i]);
}
}
count++;
}
if(count!=n)return 0;
else return 1;
}
int main() {
int n,e,u,v;
cin>>n>>e;
vector <int>adj[n+1];
for(int i=0;i<e;i++)
{
cin>>u>>v;
adj[u].push_back(v);
}
if(bfs(adj,1,n))
{
cout<<"YES"<<endl;
}
else
cout<<"NO"<<endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgogCmludCBiZnModmVjdG9yIDxpbnQ+YWRqW10saW50IHN0YXJ0LGludCBuKQp7Cglib29sIHZpc2l0ZWRbbisxXTsKCW1lbXNldCh2aXNpdGVkLDAsc2l6ZW9mKHZpc2l0ZWQpKTsKCXF1ZXVlIDxpbnQ+cTsKCXEucHVzaChzdGFydCk7CglpbnQgbm9kZSxjb3VudD0wOwoJd2hpbGUoIXEuZW1wdHkoKSkKCXsKCQlub2RlPXEuZnJvbnQoKTsKCQlxLnBvcCgpOwoJCXZpc2l0ZWRbbm9kZV09MTsKCQlmb3IoaW50IGk9MDtpPGFkaltub2RlXS5zaXplKCk7aSsrKQoJCXsKCQkJaWYodmlzaXRlZFthZGpbbm9kZV1baV1dKXJldHVybiAwOwoJCQllbHNlCgkJCXsKCQkJCXEucHVzaChhZGpbbm9kZV1baV0pOwoJCQl9CgkJfQoJCWNvdW50Kys7Cgl9CglpZihjb3VudCE9bilyZXR1cm4gMDsKCWVsc2UgcmV0dXJuIDE7Cn0KIAoKaW50IG1haW4oKSB7CgkKaW50IG4sZSx1LHY7CmNpbj4+bj4+ZTsKdmVjdG9yIDxpbnQ+YWRqW24rMV07CmZvcihpbnQgaT0wO2k8ZTtpKyspCnsKCWNpbj4+dT4+djsKCWFkalt1XS5wdXNoX2JhY2sodik7Cn0KCmlmKGJmcyhhZGosMSxuKSkKewoJY291dDw8IllFUyI8PGVuZGw7Cn0KZWxzZQpjb3V0PDwiTk8iPDxlbmRsOwoKCglyZXR1cm4gMDsKfQ==