N, M = gets.split.map(&:to_i) graph = Array.new(N) { [] } M.times do a, b = gets.split.map { |s| s.to_i - 1 } graph[a] << b graph[b] << a end removed = [false] * N inqueue = [false] * N ones = (0 ... N).filter { |v| graph[v].size == 1 } ones.each do |v| inqueue[v] = true end while (u = ones.pop) next if removed[u] or graph[u].size != 1 removed[u] = true # STDERR.puts graph[u].inspect graph[u].each do |v| next if removed[v] graph[v].delete(u) if graph[v].size == 1 and not inqueue[v] ones << v inqueue[v] = true end end graph[u].clear end c = removed.count(true) STDERR.puts c puts c.odd? ? "Yes" : "No"