#include<cstdio>
#include<cstring>
#include<algorithm> 
using namespace std;
#define LL long long
int n, m; 
int l[32], r[32];
bool red[32], blue[32];
int find(int idx[10], int x){
    if(idx[x]==-1) return x;
    return idx[x]=find(idx, idx[x]); 
}
void merge(int gra[10][10],int idx[10], int x, int y){
    int rx = find(idx, x);
    int ry = find(idx, y);
    if(rx==ry) return;
    idx[rx] = ry;
    for(int k=0;k<n;k++){
        if(~idx[k]) continue;
        if(k==ry) continue;
        gra[ry][k] += gra[rx][k];
        gra[k][ry] = gra[ry][k];
    }
}
int condense(int gra[10][10],int idx[10]){
    bool flag=true;
    while(flag){
        flag = false;
        for(int i=0;i<n;i++){
            if(~idx[i]) continue;
            for(int j=i+1;j<n;j++){
                if(~idx[j]) continue;
                if(gra[i][j]>=2){
                    merge(gra, idx, i, j);
                    flag = true;
                }
            }
        }
    }
    int cnt=0; 
    for(int i=0;i<n;i++){
        if(~idx[i]) continue; 
        cnt++;
    }
    return cnt; 
}
int minmax(int deg, int red, int gra[10][10], int idx[10]){
    bool end = true;
    for(int i=0;i<m;i++){
        if(red&(1<<i)) continue;
        int rl = find(idx, l[i]);
        int rr = find(idx, r[i]); 
        if(rl==rr) continue;
        end = false;
        int tidx[10], tgra[10][10];
        memcpy(tidx, idx, sizeof(tidx));
        memcpy(tgra, gra, sizeof(tgra));
        if(deg&1){
            merge(tgra, tidx, rl, rr);
            if(condense(tgra, tidx)==1) return 1;
            if(minmax(deg+1, red, tgra, tidx)==1) return 1; 
        } else { 
            tgra[rl][rr] = tgra[rr][rl] = 0; 
            if(minmax(deg+1, red|(1<<i), tgra, tidx)==-1) return -1;
        }
    } 
    if(end) return -1;
    if(0==(deg&1)) return 1;
    if(1==(deg&1)) return -1;
} 
int gra[10][10], idx[10];
int main(){
    while(scanf("%d%d", &n,&m), ~n){
        memset(gra, 0, sizeof(gra));
        memset(idx, -1, sizeof(idx));
        for(int i=0;i<m;i++){
            scanf("%d%d", &l[i], &r[i]); 
            if(l[i]^r[i]){
                gra[l[i]][r[i]] ++;
                gra[r[i]][l[i]] ++;
            }
        }
        if(condense(gra, idx)==1||minmax(0, 0, gra, idx)==1) puts("YES");
        else puts("NO"); 
    } 
}