#include <iostream>
#include<cstring>
#define inf 0x3f3f3f
using namespace std;
int mp[1100][1100];
int dist[1100];
int vis[1100];
int n,m,flag;
void bfs()
{
int flag =1;
int q[1200], head, trail;
head = trail =0;
vis[1] =1;
q[trail++] = 1;
while(head<trail)
{
int k = q[head++];
for(int i=1;i<=n;i++)
{
if(mp[k][i] ==1)
{
if(vis[i] ==1)
{
flag = 0;
break;
}
else
{
vis[i] = 1;
q[trail++] = i;
}
}
}
}
if(flag ) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
int main()
{
while( cin>>n>>m)
{
memset(mp,0,sizeof(mp));
memset(vis,0,sizeof(vis));
int a, b;
while(m--)
{
cin>>a>>b;
mp[a][b] = 1;
}
bfs();
}
return 0;
}
/***************************************************
User name: rj170408宋博文
Result: Accepted
Take time: 4ms
Take Memory: 896KB
Submit time: 2018-07-19 17:14:17
****************************************************/