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

struct Dsu {
    vector <int> c;
    int n;

    Dsu (int n_) {
        n = n_;
        c = vector <int> (n);
        iota (c.begin (), c.end (), 0);
    }

    bool unite (int u, int v) {
        if (c[u] == c[v])
            return false;
        int prev = c[u];
        for (int i = 0; i < n; i++)
            if (c[i] == prev)
                c[i] = c[v];
        return true;
    }
};

int main () {
    int n, m;
    cin >> n >> m;
    Dsu dsu (n);
    int res = n;
    for (int j = 0; j < m; j++) {
        int u, v;
        cin >> u >> v;
        u -= 1;
        v -= 1;
        res -= dsu.unite (u, v);
    }
    cout << ((res == 1) ? "YES" : "NO") << endl;
    return 0;
}
