#include <bits/stdc++.h>
using namespace std;
int n, m;
bool flag[21][21];
int deg[21], id[21];
vector<int> G[21];
inline int cmp(int x, int y) {
  return deg[x] != deg[y] ? deg[x] < deg[y] : x < y;
}
bool vis[21];
inline void dfs(int np) {
  vis[np] = 1;
  for (int &x : G[np]) {
    if (!vis[x]) {
      dfs(x);
      return;
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1, ti, tj; i <= m; i++) {
    scanf("%d%d", &ti, &tj);
    if (ti != tj) flag[ti][tj] = flag[tj][ti] = 1;
  }
  for (int i = 1; i <= n; i++) {
    id[i] = i;
    for (int j = 1; j <= n; j++) {
      if (flag[i][j]) deg[i]++, G[i].push_back(j);
    }
  }
  for (int i = 1; i <= n; i++) sort(G[i].begin(), G[i].end(), cmp);
  for (int i = 1; i <= n; i++) {
    memset(vis, 0, sizeof(vis));
    dfs(i);
    int cnt = 0;
    for (int j = 1; j <= n; j++) cnt += vis[j];
    if (cnt == n) {
      puts("Yes");
      return 0;
    }
  }
  puts("No");
  return 0;
}
