#include <bits/stdc++.h>
using namespace std;
vector<int> a[1111];
queue<int> p;
int ji[1111], f = 1, b[1111], c[1111];
void dfs(int p) {
  ji[p]++;
  for (int i = 0; i < a[p].size(); i++) {
    if (ji[a[p][i]] >= 3) {
      f = 0;
      return;
    }
    dfs(a[p][i]);
  }
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    a[x].push_back(y);
    b[y]++;
    c[x]++;
    c[y]++;
  }
  int h = 0;
  for (int i = 1; i <= n; i++) {
    if (!b[i] && c[i]) {
      p.push(i);
      ji[i]++;
      h++;
    }
  }
  while (!p.empty()) {
    int k = p.front();
    p.pop();
    ji[k]++;
    for (int i = 0; i < a[k].size(); i++) {
      int x = a[k][i];
      b[x]--;
      if (!b[x] && !ji[x]) {
        p.push(x);
        h++;
        ji[x]++;
      }
    }
  }
  if (h == n)
    printf("yes\n");
  else
    printf("no\n");
  return 0;
}
