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
****************************************************************/