#include<iostream>
#include<vector>
#include<stack>
#include<cstring>
#include<cstdio>
using namespace std;
#define N 100010
vector<int>l[N];
int n,m,x,y;
int dfn[N],low[N],tc,scc[N],num;
bool vis[N];
stack<int>st;
void tarjan(int v){
dfn[v]=low[v]=++tc;
vis[v]=true;
st.push(v);
for(int i=0;i<l[v].size();i++){
int u=l[v][i];
if(!dfn[u]){
tarjan(u);
low[v]=min(low[v],low[u]);
}
else if(vis[u]){
low[v]=min(low[v],dfn[u]);
}
}
if(dfn[v]==low[v]){
vis[v]=false;
scc[v]=++num;
int u=st.top();
while(u!=v){
st.pop();
scc[u]=num;
vis[u]=false;
u=st.top();
}
st.pop();
}
}
int main(){
cin>>n>>m;
while(n&&m){
num=tc=0;
memset(l,0,sizeof(l));
while(!st.empty())st.pop();
for(int i=1;i<=m;i++){
cin>>x>>y;
if(x==y)continue;
l[x].push_back(y);
}
memset(low,0x7f,sizeof(low));
memset(dfn,0,sizeof(dfn));
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++){
if(!dfn[i])tarjan(i);
}
if(num<=1)cout<<"Yes\n";
else cout<<"No\n";
cin>>n>>m;
}
}