#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int main () {
	int n, m;
	cin >> n >> m;
	vector<vector<int> > graph(n + 1);
	vector<int> color(n, -1);
	int v1, v2;
	for (int i = 0; i < m; i++) {
		cin >> v1 >> v2;
		graph[v1].push_back(v2);
		graph[v2].push_back(v1);
	}
	queue<int> q;
	bool ans = true;
	for (int i = 1; i <= n; i++) {
		if (color[i] < 0) {
			q.push(i);
			color[i] = 0;
			while (!q.empty()) {
				int v = q.front();
				q.pop();
				for (vector<int>::iterator it = graph[v].begin(); it != graph[v].end(); it++) {
					int to = *it; 
					if (color[to] < 0) {
						color[to] = color[v] ^ 1;
						q.push(to);
					} else if (!(color[to] ^ color[v])) {
						ans = false;
						break;	
					}
				} 
			}
 		}
 		if (!ans) break;
 	}
 	cout << (ans ? "Yes" : "No") << endl;
}