//  Created by Sengxian on 2017/6/24.
//  Copyright (c) 2017年 Sengxian. All rights reserved.
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
inline int readInt() {
	int n = 0, ch = getchar();
	while (!isdigit(ch)) ch = getchar();
	while (isdigit(ch)) n = n * 10 + ch - '0', ch = getchar();
	return n;
}

const int MAX_N = 200000 + 3;
int n, m;

struct Data {
	int l, r;
	Data(int l = 0, int r = 0) : l(l), r(r) {}
	
	bool operator < (const Data &ano) const {
		return l < ano.l;
	}
} a[MAX_N];

int main() {
	n = readInt(), m = readInt();
	for (int i = 0; i < n; ++i) a[i].l = readInt(), a[i].r = readInt();
	sort(a, a + n);
	
	priority_queue<int, vector<int>, greater<int> > pq1, pq2;
	int ans = 0, pos = 1;
	for (int i = 0; i < n; ++i)
		if (a[i].l >= pos && pos <= m) {
			pq1.push(a[i].r);
			++pos, ++ans;
		} else {
			pq1.push(a[i].r);
			pq2.push(pq1.top());
			pq1.pop();
		}
		
	while (!pq2.empty() && pos <= m) {
		int p = pq2.top(); pq2.pop();
		if (p == m + 1) break;
		++ans;
		pos = max(pos, p) + 1;	
	}
	
	printf("%d\n", n - ans);
	
	return 0;
}
