fun solve(): Boolean { val (n, m) = readInts() val g = List(n) { mutableListOf() } repeat(m) { val (a, b) = readInts().map { it - 1 } g[a].add(b) g[b].add(a) } val nn = n.countTrailingZeroBits() if (n != 1 shl nn) return false if (g.any { it.size != nn }) return false val ans = IntArray(n) { 0 } val done = IntArray(n) { 0 } ans[0] = 0 done[0] = 2 val q = mutableListOf() for ((index, v) in g[0].withIndex()) { ans[v] = 1 shl index q.add(v) done[v] = 2 } var pt = 0 while (pt < q.size) { val v = q[pt++] done[v] = 2 for (u in g[v]) { if (done[u] == 0) { done[u] = 1 q.add(u) } if (done[u] != 2) { ans[u] = ans[u] or ans[v] } } } return g.indices.all { x -> g[x].all { y -> (ans[x] xor ans[y]).countOneBits() == 1 } } } fun main() { println(if (solve()) "yes" else "no") } private fun readInt() = readln().toInt() private fun readLongs() = readStrings().map { it.toLong() } private fun readStrings() = readln().split(" ") private fun readInts() = readStrings().map { it.toInt() }