#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
struct {
int to;
int nxt;
}edges[N << 1];
int head[N], cnt = 0;
int n, m;
int color[N];
void add(int u, int v)
{
edges[++cnt].to = v;
edges[cnt].nxt = head[u];
head[u] = cnt;
}
bool dfs(int v, int t)
{
color[v] = t;
for (int e = head[v]; e != 0; e = edges[e].nxt) {
if (!color[edges[e].to]) {
if (!dfs(edges[e].to, 3 - t))
return false;
}
else {
if (color[edges[e].to] == t)
return false;
}
}
return true;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("D:/VS CODE/C++/in.txt", "r", stdin);
freopen("D:/VS CODE/C++/out.txt", "w", stdout);
#endif
cin >> n >> m;
for (int i = 0; i < m; ++i) {
int a, b;
scanf("%d %d", &a, &b);
add(a, b);
add(b, a);
}
bool flag = true;
for (int i = 1; i <= n; ++i) {
if (!color[i]) {
if(!dfs(i, 1)) {
flag = false;
}
}
}
if (flag)
puts("Yes");
else
{
puts("No");
}
fclose(stdin);
fclose(stdout);
return 0;
}