#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=1010;
int n,m;
int pre[maxn];
void init()
{
for(int i=1;i<=n;i++) pre[i]=i;
}
int find(int x)
{
return pre[x]==x?x:pre[x]=find(pre[x]);
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
int u,v;
for(int i=0;i<m;i++)
{
scanf("%d%d",&u,&v);
pre[find(u)]=pre[find(v)]; // 合并为同一个根
}
int cnt=0;
for(int i=1;i<=n;i++) // 统计 root 结点个数
if(pre[i]==i)
{
cnt++;
if(cnt>1) break;
}
puts(cnt==1?"YES":"NO");
}
return 0;
}