#include <iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;

const int N = 2e5 + 5;

#define pii pair<int, int>

int n, m;
pii seg[N];
int uf[N];
priority_queue<int, vector<int>, greater<int>> Q;
int find(int x) {
	return uf[x] == x ? x : (uf[x] = find(uf[x]));	
}
void unit(int x, int y) {
	x = find(x), y = find(y);
	if (x > y)
		swap(x, y);
	if (x ^ y)
		uf[x] = y;
}

int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1, l, r; i <= n; i++) {
		scanf("%d%d", &l, &r);
		seg[i] = pii(l, r);
	}
	sort(seg + 1, seg + n + 1);
	uf[0] = 1;
	for (int i = 1; i <= m + 1; i++) {
		uf[i] = i;
	}
	pii *p = seg + 1, *_p = seg + n + 1;
	int ans = 0;
	for (int i = 0; i <= m; i++) {
		if (i && find(i) == i) {
			Q.push(0);
		} else if (i) {
			Q.push(i);
		}
		while (p != _p && p->first == i) {
			int R = p->second;
			boolean suc = false;
			if (!Q.empty()) {
				int tp = Q.top();
				if (tp < R) {
					int p = find(tp);
					if (p <= m) {
						unit(p, p + 1);
						Q.pop();
						Q.push(R);
						ans++;
						suc = true;
					}
				}
			}
			if (!suc) {
				int p = find(R);
				if (p <= m) {
					unit(p, p + 1);
					ans++;
					suc = true;
				}
			}
			p++;
		}
	}
	printf("%d\n", n - ans);
	return 0;
#include <bits/stdc++.h>
using namespace std;
typedef bool boolean;

const int N = 2e5 + 5;

#define pii pair<int, int>

int n, m;
pii seg[N];
int uf[N];
priority_queue<int, vector<int>, greater<int>> Q;
int find(int x) {
	return uf[x] == x ? x : (uf[x] = find(uf[x]));	
}
void unit(int x, int y) {
	x = find(x), y = find(y);
	if (x > y)
		swap(x, y);
	if (x ^ y)
		uf[x] = y;
}

int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1, l, r; i <= n; i++) {
		scanf("%d%d", &l, &r);
		seg[i] = pii(l, r);
	}
	sort(seg + 1, seg + n + 1);
	uf[0] = 1;
	for (int i = 1; i <= m + 1; i++) {
		uf[i] = i;
	}
	pii *p = seg + 1, *_p = seg + n + 1;
	int ans = 0;
	for (int i = 0; i <= m; i++) {
		if (i && find(i) == i) {
			Q.push(0);
		} else if (i) {
			Q.push(i);
		}
		while (p != _p && p->first == i) {
			int R = p->second;
			boolean suc = false;
			if (!Q.empty()) {
				int tp = Q.top();
				if (tp < R) {
					int p = find(tp);
					if (p <= m) {
						unit(p, p + 1);
						Q.pop();
						Q.push(R);
						ans++;
						suc = true;
					}
				}
			}
			if (!suc) {
				int p = find(R);
				if (p <= m) {
					unit(p, p + 1);
					ans++;
					suc = true;
				}
			}
			p++;
		}
	}
	printf("%d\n", n - ans);
	return 0;
}