program acm1908;
var g:array[1..1000,1..1000] of boolean;
n,m,i,j,x,y:longint;
vis:array[1..1000] of boolean;
f:boolean;
procedure dfs(v:longint);
var i:longint;
begin
vis[v]:=true;
for i:=1 to n do
if (not vis[i]) and g[v,i] then
dfs(i);
end;
begin
readln(n,m);
while (n<>0) or (m<>0) do
begin
fillchar(g,sizeof(g),0);
fillchar(vis,sizeof(vis),0);
for i:=1 to m do
begin
readln(x,y);
g[x,y]:=true;
g[y,x]:=true;
end;
dfs(1);
f:=true;
for i:=1 to n do
if not vis[i] then
begin writeln('NO'); f:=false; break;end;
if f then writeln('YES');
readln(n,m);
end;
end.
/**************************************************************
Problem: 2191
User: admin
Language: Pascal
Result: Wrong Answer
****************************************************************/