#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>

#define Rep(i, n) for (int i = 1; i <= n; i ++)
#define Rep0(i, n) for (int i = 0; i <= n; i ++)

using namespace std;

const int N = 200010;

vector<int> t[N];
int t1[N];

priority_queue<int> q;

int main()
{
	int n, m;
	scanf("%d%d", &n, &m);
	Rep(i, n){
		int l, r;
		scanf("%d%d", &l, &r);
		t[l].push_back(r);
	}
	for (int i = m; i; i --) {
		if (t[i].size()) Rep0(j, t[i].size() - 1) q.push(t[i][j]);
		if (!q.empty()) q.pop(); 
	}
	if (t[0].size()) Rep0(i, t[0].size() - 1) q.push(t[0][i]);
	
	while (!q.empty()){
		t1[q.top()] ++;
		q.pop();
	}
	int cnt = 0;
	Rep(i, m) {
		cnt += t1[i];
		if (cnt >= 1) cnt --;
	}
	cnt += t1[m + 1];
	printf("%d\n", max(cnt, n - m));
	
	return 0;
}