class UnionFind: def __init__(self, n): self.n = n self.parent_or_size = [-1] * n def merge(self, a, b): x = self.root(a) y = self.root(b) if x == y: return False if -self.parent_or_size[x] < -self.parent_or_size[y]: x, y = y, x self.parent_or_size[x] += self.parent_or_size[y] self.parent_or_size[y] = x return True def same(self, a, b): return self.root(a) == self.root(b) def root(self, a): if self.parent_or_size[a] < 0: return a self.parent_or_size[a] = self.root(self.parent_or_size[a]) return self.parent_or_size[a] def size(self, a): return -self.parent_or_size[self.root(a)] N, M = map(int, input().split()) uf = UnionFind(N * 2) for _ in range(M): a, b = map(int, input().split()) uf.merge(a - 1, b - 1 + N) uf.merge(a - 1 + N, b - 1) for i in range(N): if not uf.same(i, i + N): print("No") exit() print("Yes")