/*
* File: 1269.cpp,直接判断一个图是否是强联通图,直接带模版
* Author: chenjiang
*
* Created on 2010年5月8日, 上午10:53
*/
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
#define _max 10005
bool visited[_max];
int scc_num[_max];
int scc_id[_max];
vector<int>v2[_max];
vector<int>v1[_max];
int order[_max];
int n, m;
int id;
int ind;
void dfs1(int k) {
int i, j;
visited[k] = 1;
for (i = 0; i < v1[k].size(); i++) {
if (!visited[v1[k][i]])
dfs1(v1[k][i]);
}
ind++;
order[ind] = k;
}
void dfs2(int k) {
visited[k] = 1;
int i;
scc_num[id]++;
scc_id[k] = id;
for (i = 0; i < v2[k].size(); i++) {
if (!visited[v2[k][i]])
dfs2(v2[k][i]);
}
}
void kosaroju() {
int i, j;
ind = 0;
memset(visited, 0, sizeof (visited));
for (i = 1; i <= n; i++) {
if (!visited[i])
dfs1(i);
}
memset(visited, 0, sizeof (visited));
memset(scc_num, 0, sizeof (scc_num));
id=0;
for (i = ind; i > 0; i--) {
if (!visited[order[i]]) {
id++;
dfs2(order[i]);
}
}
}
/*
*
*/
int main(int argc, char** argv) {
int i, j, a, b;
//system("pause");
while (cin >> n >> m) {
if (n == 0 && m == 0)break;
for (i = 1; i <= n; i++) {
v1[i].clear();
v2[i].clear();
}
for (i = 1; i <= m; i++) {
cin >> a >> b;
v1[a].push_back(b);
v2[b].push_back(a);
}
kosaroju();
if (id != 1)cout << "No" << endl;
else cout << "Yes" << endl;
}
return (EXIT_SUCCESS);
}