/*
3936 - Justice League
Autor: Tres Tristes Teclas
Estado: Accepted

-

Se recorren los vertices no marcados siguiendo un orden creciente, segun cantidad de adyacentes, marcandolos con "noliga"
y a sus adyacentes con "liga".
Luego, si la liga formada es valida (existe arco entre cada par de vertices que la conforman) el resultado es Y, en otro caso es N.

*/

#include <iostream>
#include <list>
#include <set>
#include <map>

#define R 100001
#define H 50001

using namespace std;

enum Estado{afuera,adentro,noMarcado};

int h,r;
list<int> adyacentes[H];
map <int, list<int> > queTienen;
Estado eVertice[H];
set<int> liga;


void clasificar(int h){
    if (eVertice[h]==noMarcado){
        eVertice[h]=afuera;
        for (list<int>::iterator it=adyacentes[h].begin(); it!=adyacentes[h].end(); it++){
            eVertice[*it]=adentro;
            liga.insert(*it);
        }
    }
}

bool relacion(int a, int b){
    if (a==b) return true;
    for (list<int>::iterator it=adyacentes[a].begin(); it!=adyacentes[a].end(); it++)
        if (*it==b) return true;
    return false;
}


bool hagotodo(){
    for (map<int, list<int> >::iterator itm=queTienen.begin(); itm!=queTienen.end(); itm++)
        for (list<int>::iterator itl=itm->second.begin(); itl!=itm->second.end(); itl++)
            clasificar(*itl);

    for(set<int>::iterator it=liga.begin();it!=liga.end();it++)
        for(set<int>::iterator it2=it;it2!=liga.end();it2++)
            if(!relacion(*it,*it2))
                return false;

    return true;
}

int main(){
    while(cin>>h>>r && h!=0){
        //entrada:
        liga.clear();
        queTienen.clear();
        for(int i=1;i<=h;i++){
            adyacentes[i].clear();
            eVertice[i]=noMarcado;
        }

        int ori,dest;
        for(int i=0;i<r;i++){
            cin>>ori>>dest;
            adyacentes[ori].push_back(dest);
            adyacentes[dest].push_back(ori);
        }

        for (int i=1;i<=h;i++){
            queTienen[adyacentes[i].size()].push_back(i);
        }

        if(hagotodo())
            cout<<"Y"<<endl;
        else
            cout<<"N"<<endl;

    }
    return 0;
};

