AtCoder Beginner Contest 238 E

https://atcoder.jp/contests/abc238/tasks/abc238_e

パッと見線形代数ですが、AtCoderだからDPかもしれないと考えると、次のような状態を考えることができます。

 s: a_1 + \cdots + a_s

そう考えると a_1 + a_2 + a_3から(4, 6)を足すと a_1 + \cdots + a_6、(2, 3)を引くと a_1となります。すなわち、6 <-> 3 <-> 1というようなグラフを考えることができます。例1なら 0 <-> 2 <-> 1 <-> 3、例2なら 2 <-> 0 <-> 3 <-> 1 です。
このようなグラフを作って、0から辿ってNに着けばOKです。

# coding: utf-8
# Range Sums

from itertools import *
import sys


#################### library ####################

def read_tuple():
    return tuple(map(int, raw_input().split()))

def YesNo(b):
    return 'Yes' if b else 'No'


#################### naive ####################


#################### process ####################

def read_input():
    N, Q = read_tuple()
    LR = [ read_tuple() for _ in range(Q) ]
    return (N, LR)

def make_graph(N, LR):
    graph = dict((v, []) for v in range(N+1))
    for L, R in LR:
        graph[L-1].append(R)
        graph[R].append(L-1)
    return graph

def F(N, LR):
    graph = make_graph(N, LR)
    visited = [False] * (N+1)
    visited[0] = True
    stack = [0]
    while stack:
        v0 = stack.pop()
        for v in graph[v0]:
            if not visited[v]:
                stack.append(v)
                visited[v] = True
    return visited[N]


#################### main ####################

N, LR = read_input()
print YesNo(F(N, LR))