/**
二分图判定
图的着色问题,最小着色数为二的图
DFS
*/
#include "cstdio"
#include "cstring"
#include "cstdlib"
#include "vector"
#define MAX 1002
std::vector<int> G[MAX];
int color[MAX];
int n;
bool dfs(int x,int c)
{
color[x]=c;
for(int i=0;i<G[x].size();i++)
{
if(color[G[x][i]]==c)return false;
if(color[G[x][i]]==0&&!dfs(G[x][i],-c))return false;
}
return true;
}
void solve()
{
int i=0;
for(i=0;i<n;i++)
{
if(color[i]==0)
{
if(!dfs(i,1))
{
printf("No\n");
return ;
}
}
}
printf("Yes\n");
}
int main()
{
int x,y,k;
while(~scanf("%d",&n)&&n)
{
memset(color,0,sizeof(color));
for(int i=0;i<n;i++)
G[i].clear();
scanf("%d",&k);
for(int i=0;i<k;i++)
{
scanf("%d%d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
}
/*for(int i=0;i<n;i++)
{
for(int j=0;j<G[i].size();j++)
printf("%d ",G[i][j]);
system("pause");
printf("\n");
}*/
solve();
}
return 0;
}