#include <bits/stdc++.h>
#define int long long
using namespace std;

int n, m;
int it[800005], lazy[800005];
pair<int, int> a[200005];

void down(int id)
{
	it[id*2]+=lazy[id];
	it[id*2+1]+=lazy[id];
	lazy[id*2]+=lazy[id];
	lazy[id*2+1]+=lazy[id];
	lazy[id]=0;
}

void update(int id, int l, int r, int u, int v)
{
	if(l>v||r<u) return;
	if(l>=u&&r<=v)
	{
		it[id]++;
		lazy[id]++;
		return;
	}
	down(id);
	int mid=(l+r)/2;
	update(id*2, l, mid, u, v);
	update(id*2+1, mid+1, r, u, v);
	it[id]=max(it[id*2], it[id*2+1]);
}

int get(int id, int l, int r, int u, int v)
{
	if(l>v||r<u) return -1e9;
	if(l>=u&&r<=v)
	{
		return it[id];
	}
	down(id);
	int mid=(l+r)/2;
	return max(get(id*2, l, mid, u, v), get(id*2+1, mid+1, r, u, v));
}

void build_tree(int id, int l, int r)
{
	if(l==r)
	{
		it[id]=-(m+1-l);
		return;
	}
	int mid=(l+r)/2;
	build_tree(id*2, l, mid);
	build_tree(id*2+1, mid+1, r);
	it[id]=max(it[id*2], it[id*2+1]);
}

signed main()
{
	cin>>n>>m;
	for(int i=1; i<=n; i++)
	{
		cin>>a[i].first>>a[i].second;
	}
	sort(a+1, a+n+1);
	build_tree(1, 1, m+1);
	int ans=max(0ll, n-m);
	// cout<<get(1, 1, m+1, 3, m+1)<<endl;
	for(int i=1; i<=n; i++)
	{
		update(1, 1, m+1, 1, a[i].second);
		ans=max(ans, -a[i].first+get(1, 1, m+1, a[i].first+1, m+1));
		// cout<<get(1, 1, m+1, a[i].first+1, m+1)<<endl;
		// cout<<i<<" "<<ans<<endl;
	}
	cout<<ans;
}