#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define f(i, x, n) for(int i = x; i < (int)(n); ++i)

int fn[800010], s[800010], n, m, an;
pair<int, int> p[200000];

bool cmp(pair<int, int> const &a, pair<int, int> const &b){
	if (a.first == b.first)return a.second > b.second;
	return a.first < b.first;
}

void ad(int i, int z, int l = 0, int r = m + 2, int id = 1){
	if (l + 1 == r) { fn[id] += z, s[id] += z; return ; }
	int m = l + r >> 1, a = id << 1, b = id << 1 | 1;
	if (i < m)ad(i, z, l, m, a);
	else ad(i, z, m, r, b);
	fn[id] = max(fn[a] + s[b], fn[b]);
	s[id] = s[a] + s[b];
}

pair<int, int> gt(int x, int y, int l = 0, int r = m + 2, int id = 1){
	if (l >= y || r <= x)return make_pair(-1e9, 0);
	if (l >= x && r <= y)return make_pair(fn[id], s[id]);
	int m = l + r >> 1, a = id << 1, b = id << 1 | 1;
	pair<int, int> p = gt(x, y, l, m, a), q = gt(x, y, m, r, b);
	return make_pair(max(q.first, p.first + q.second), p.second + q.second);
}

int main(){
	scanf("%d%d", &n, &m);
	an = max(0, n - m);
	f(i, 0, n)scanf("%d%d", &p[i].first, &p[i].second);
	sort(p, p + n, cmp);
	f(i, 1, m + 1)ad(i, -1);
	f(i, 0, n){
		ad(p[i].second, 1);
		an = max(an, gt(p[i].first + 1, m + 2).first - p[i].first);
	}
	printf("%d\n", an);
}