#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e5 + 5;
long long n, m;
vector<long long> a[MaxN];
bool visited[MaxN];
void input()
{
cin >> n >> m;
for (long long i = 1; i <= m; i++)
{
long long u, v;
cin >> u >> v;
a[u].push_back(v);
a[v].push_back(u);
}
}
void dfs(long long s)
{
stack<long long> st;
st.push(s);
visited[s] = true;
while (!st.empty())
{
long long u = st.top();
st.pop();
for (long long v : a[u])
{
if (!visited[v])
{
visited[v] = true;
st.push(v);
}
}
}
}
void solve()
{
if (m != n - 1)
{
cout << "NO";
return;
}
dfs(1);
for (long long i = 1; i <= n; i++)
{
if (!visited[i])
{
cout << "NO";
return;
}
}
cout << "YES";
}
int main()
{
input();
solve();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGxvbmcgbG9uZyBNYXhOID0gMWU1ICsgNTsKCmxvbmcgbG9uZyBuLCBtOwp2ZWN0b3I8bG9uZyBsb25nPiBhW01heE5dOwpib29sIHZpc2l0ZWRbTWF4Tl07Cgp2b2lkIGlucHV0KCkKewogICAgY2luID4+IG4gPj4gbTsKCiAgICBmb3IgKGxvbmcgbG9uZyBpID0gMTsgaSA8PSBtOyBpKyspCiAgICB7CiAgICAgICAgbG9uZyBsb25nIHUsIHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKCiAgICAgICAgYVt1XS5wdXNoX2JhY2sodik7CiAgICAgICAgYVt2XS5wdXNoX2JhY2sodSk7CiAgICB9Cn0KCnZvaWQgZGZzKGxvbmcgbG9uZyBzKQp7CiAgICBzdGFjazxsb25nIGxvbmc+IHN0OwoKICAgIHN0LnB1c2gocyk7CiAgICB2aXNpdGVkW3NdID0gdHJ1ZTsKCiAgICB3aGlsZSAoIXN0LmVtcHR5KCkpCiAgICB7CiAgICAgICAgbG9uZyBsb25nIHUgPSBzdC50b3AoKTsKICAgICAgICBzdC5wb3AoKTsKCiAgICAgICAgZm9yIChsb25nIGxvbmcgdiA6IGFbdV0pCiAgICAgICAgewogICAgICAgICAgICBpZiAoIXZpc2l0ZWRbdl0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZpc2l0ZWRbdl0gPSB0cnVlOwogICAgICAgICAgICAgICAgc3QucHVzaCh2KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBzb2x2ZSgpCnsKICAgIGlmIChtICE9IG4gLSAxKQogICAgewogICAgICAgIGNvdXQgPDwgIk5PIjsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZGZzKDEpOwoKICAgIGZvciAobG9uZyBsb25nIGkgPSAxOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBpZiAoIXZpc2l0ZWRbaV0pCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8ICJOTyI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCAiWUVTIjsKfQoKaW50IG1haW4oKQp7CiAgICBpbnB1dCgpOwogICAgc29sdmUoKTsKfQ==