#include <iostream>
#include<vector>
using namespace std;

int n, m,cnt;

int a[150005], b[150005];
int daxet[150005];
vector <int> adj[150005];
vector <int> f[150005];

void dfs(int v){
	daxet[v] = 1;
	f[cnt].push_back(v);
	for (int i = 0; i < adj[v].size(); i++){
		if (!daxet[adj[v][i]]){
			dfs(adj[v][i]);
		}
	}
}

int main(){
	cin >> n >> m;
	for (int i = 1; i <= m; i++){
		cin >> a[i] >> b[i];
		adj[a[i]].push_back(b[i]);
		adj[b[i]].push_back(a[i]);
	}
	for (int i = 1; i <= n; i++){
		if (!daxet[i]){
			cnt++;
			dfs(i);
		}
	}
	int sz;
	for (int i = 1; i <= cnt; i++){
		sz = f[i].size();
		for (int j = 0; j < sz; j++){
			if (adj[f[i][j]].size() != sz-1){
				cout << "NO";
				return 0;
			}
		}
	}
	cout << "YES";
	return 0;
	
}