#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; #define rep(cur,k) for (int cur = 0; cur < (int)(k); cur++) #define all(cnt) begin(cnt), end(cnt) const int INF = 1e9; int n, m; vector> g; vector dist, mi, ma; int main() { while (cin >> n >> m) { g.assign(n, {}); for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; --a; --b; g[a].emplace_back(b); g[b].emplace_back(a); } queue q; q.push(0); dist.assign(n, INF); dist[0] = 0; while (q.size()) { int cur = q.front(); q.pop(); for (auto &dst : g[cur]) { if (dist[dst] == INF) { q.push(dst); dist[dst] = dist[cur] + 1; } } } vector acc(n, false); mi.assign(n, INF); ma.assign(n, -INF); for (int i = 0; i < n; i++) { for (auto j : g[i]) { if (dist[j] == 1) { acc[i] = true; mi[i] = min(mi[i], j); ma[i] = max(ma[i], j); } } } bool ok = false; for (int i = 0; i < n; i++) { for (auto &j : g[i]) { if (acc[i] && acc[j]) { } if (mi[i] != ma[j] && mi[i] != INF && ma[j] != -INF) ok = true; if (mi[j] != ma[i] && mi[j] != INF && ma[i] != -INF) ok = true; } } if (ok) exit(100); cout << (ok ? "YES" : "NO") << endl; } }