#include<stdio.h>

struct Point{
    int x;
    int y;
};
struct Edge{
    int from;
    int to;
    int height;
};

struct Point point[1000];
struct Edge edge[1000*999/2];
int father[1001];
int height[1001];

void inital(int n){
    for(int i = 1; i <= n; i++){
        father[i] = i;
        height[i] = 1;
    }
}

int Find(int x){
    if(father[x] != x){
        father[x] = Find(father[x]);
    }
    return father[x];
}

void Union(int a, int b){
    a = Find(a);
    b = Find(b);
    if (a != b){
        if(height[a] > height[b]){
            father[b] = a;
        }
        else if (height[a] < height[b])
        {
            father[a] = b;
        }
        else{
            father[a] = b;
            height[b]++;
        }
        
    }
}

int main(){
    int n, m;
    int a, b;
    int x, y, c = 0;

    while(scanf("%d %d", &n,&m) != EOF){
        c = 0;
        if (n == 0 || m == 0) break;
        inital(n);
        for(int i = 0; i < m; i++){
            scanf("%d %d", &a, &b);
            Union(a, b);
        }
        x = Find(1);
        for(int i = 2; i <= n;i++){
            y = Find(i);
            if (x == y) continue;
            else{
                c++;
                x = y;
            }
            
        }
        if(c != 0) printf("%s\n","NO");
        else printf("%s\n", "YES");
        //printf("%d\n", c);
    }
   return 0;
}