vector<int> g[10000];
int V,E,color[10000];
bool dfs(int v,int c)
{
color[v]=c;
for(int i=0; i<g[v].size(); i++)
{
if(color[g[v][i]]==c)return false;
if(color[g[v][i]]==0&&!dfs(g[v][i],-c))
return false;
}
return true;
}
void solve()
{
for(int i=0; i<V; i++)
{
if(color[i]==0)
{
if(!dfs(i,1))
{
printf("no\n");
return ;
}
}
}
printf("yes\n");
}
int main()
{
int i,u,v;
//srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样
//for( i=0;i<10;i++)
//push(int(rand()%11));
scanf("%d%d",&V,&E);
for(i=0; i<E; i++)
{
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
solve();
return 0;
}
int V,E,color[10000];
bool dfs(int v,int c)
{
color[v]=c;
for(int i=0; i<g[v].size(); i++)
{
if(color[g[v][i]]==c)return false;
if(color[g[v][i]]==0&&!dfs(g[v][i],-c))
return false;
}
return true;
}
void solve()
{
for(int i=0; i<V; i++)
{
if(color[i]==0)
{
if(!dfs(i,1))
{
printf("no\n");
return ;
}
}
}
printf("yes\n");
}
int main()
{
int i,u,v;
//srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样
//for( i=0;i<10;i++)
//push(int(rand()%11));
scanf("%d%d",&V,&E);
for(i=0; i<E; i++)
{
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
solve();
return 0;
}