#include #include #include #include #define FORR(i,b,e) for(int i=(b);i<(int)(e);++i) #define FOR(i,e) FORR(i,0,e) #define sortuniq(v) sort(v.begin(), v.end()), v.erase(unique(v.begin(),v.end()),v.end()) #define dump(var) cerr << #var ": " << var << "\n" #define dumpc(con) for(auto& e: con) cerr << e << " "; cerr<<"\n" typedef long long ll; typedef unsigned long long ull; const double EPS = 1e-6; const int d4[] = {0, -1, 0, 1, 0}; using namespace std; int N, M; struct Row { int l, r; void flip() { int t = M - 1 - l; l = M - 1 - r; r = t; } bool operator<(const Row &o) const { return l != o.l? l < o.l: r < o.r; } }; int main() { cin.tie(0); ios::sync_with_stdio(false); cin >> N >> M; vector row(N); FOR(i, N) { cin >> row[i].l >> row[i].r; if (row[i].l >= M/2) row[i].flip(); } sort(row.begin(), row.end()); vector w(M, -1); FOR(i, N) { bool overlap = false; FORR(j, row[i].l, row[i].r+1) { if (w[j] >= 0) { overlap = true; break; } } if (overlap) { row[i].flip(); FORR(j, row[i].l, row[i].r+1) { if (w[j] >= 0) { goto FAILURE; } } } FORR(j, row[i].l, row[i].r+1) w[j] = i; } // dumpc(w); cout << "YES" << endl; return 0; FAILURE: cout << "NO" << endl; return 0; }