#include <bits/stdc++.h>
using namespace std;
bool b[150000] = {0};
bool dfs(int n, vector<set<int>>& v) {
  b[n] = 1;
  for (auto itr = v[n].begin(); itr != v[n].end(); itr++) {
    if (!b[*itr])
      if (v[n] != v[*itr]) return 0;
    if (!b[*itr]) dfs(*itr, v);
  }
  return 1;
}
int main() {
  int n, m;
  cin >> n >> m;
  vector<set<int>> v(n);
  for (int i = 0; i < n; i++) v[i].insert(i);
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    v[a].insert(b);
    v[b].insert(a);
  }
  bool r = 1;
  for (int i = 0; i < n && r; i++) {
    if (!b[i]) {
      if (!dfs(i, v)) r = 0;
    }
  }
  cout << (r ? "YES" : "NO");
  return 0;
}
