#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1e6+10;
typedef pair<int,int> pii;
int n,m,ans;pii p[N];
priority_queue<int> Q;
int size[N],ll;
#define lc x<<1
#define rc x<<1|1
void add(int x,int l,int r,int p){
	size[x]++;
	if (l==r) return;
	int mid=(l+r)>>1;
	if (p>mid) add(rc,mid+1,r,p);else add(lc,l,mid,p);
}
int query(int x,int l,int r,int p){
	if (r<p||size[x]==r-l+1) return 0;
	if (l==r) return l;
	int mid=(l+r)>>1,ans=query(lc,l,mid,p);
	return ans?ans:query(rc,mid+1,r,p);
}
int main()
{
	scanf("%d%d",&m,&n);ans=m;
	for (int i=1;i<=m;i++) scanf("%d%d",&p[i].first,&p[i].second);
	sort(p+1,p+m+1);
	ll=n;
	for (int i=1;i<=m;i++){
		int x=query(1,1,n,p[i].second);
		if (x) add(1,1,n,x),ll--;else Q.push(p[i].first);
	}
	for (int i=ll;i;i--)
		if (!Q.empty()&&Q.top()>=i) Q.pop();
	printf("%d\n",(int)Q.size());
	return 0;
}