#include <bits/stdc++.h>
#define MAX 1000
using namespace std;
typedef struct{
int a,b;
}Road;
Road roads[MAX];
int vexset[MAX];
int getroot(int a){
while(a != vexset[a])
a = vexset[a];
return a;
}
int main(){
int n,m,i,a,b;
while(cin>>n>>m){//n是顶点数,m是边数
if(n == 0 && m == 0)
break;
for(i = 0; i < n; i++){ //初始化每个节点
vexset[i] = i;
}
for(i = 0; i < m; i++){
cin>>roads[i].a>>roads[i].b; //初始化边
}
for(i = 0; i < m; i++){
a = getroot(roads[i].a);
b = getroot(roads[i].b);
if(a != b){
vexset[a] = b;
}
}
int sum = 0;
for(i = 0; i < n; i++){
if(getroot(i) == i)
sum += 1;
}
if(sum > 1)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
}