#include <algorithm>
#include <iostream>
#include <vector>
#define N 100000
using namespace std;
void func(int);
bool visited[N];
int n,m,u,v,flag,f2,cnt[N];
vector<int> edge[N];

int main(){
  while(1){
    cin>>n>>m;
    if(!n&&!m) break;
    for(int i=0;i<m;i++){
      cin>>u>>v;
      edge[u-1].push_back(v-1);
      edge[v-1].push_back(u-1);
    }
    flag=f2=0;
    for(int i=0;i<n;i++){
      if(edge[i].size()>=3) flag=1;
      if(edge[i].size()==2) f2=1;
    }
    if(f2&&!flag){
      for(int i=0;i<n;i++) visited[i]=false,cnt[i]=0;
      for(int i=0;i<n;i++)
	if(!visited[i]) func(i);
      for(int i=0;i<n;i++)
	if(cnt[i]>=2) flag=1;
    }
    if(flag) cout<<"no"<<endl;
    else cout<<"yes"<<endl;
    for(int i=0;i<n;i++) edge[i].clear();
  }
  return 0;
}

void func(int x){
  visited[x]=true;
  for(int i=0;i<edge[x].size();i++)
    if(!visited[edge[x][i]]) cnt[edge[x][i]]++;
  for(int i=0;i<edge[x].size();i++)
    if(!visited[edge[x][i]]) func(edge[x][i]);
}