//by sdfzchy
#include<bits/stdc++.h>
using namespace std;

const int mod=1e9+7,inf=(1<<30);
typedef long long LL;

inline int in()
{
	char ch=getchar();
	int f=1,o=0;
	while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') {o=(o<<1)+(o<<3)+ch-'0';ch=getchar();}
	return f*o;
}

const int N=400010;
int n,m,w[N<<1],col[N<<1];

void build(int l,int r,int rt)
{
	if(l==r) return void(w[rt]=l);
	int mid=l+r>>1;
	build(l,mid,rt<<1);
	build(mid+1,r,rt<<1|1);
	w[rt]=max(w[rt<<1],w[rt<<1|1]);
}

void add(int L,int R,int l,int r,int rt)
{
	if(L<=l&&R>=r) {w[rt]++;col[rt]++;return;}
	int mid=l+r>>1;
	if(L<=mid) add(L,R,l,mid,rt<<1);
	if(R>mid)  add(L,R,mid+1,r,rt<<1|1);
	w[rt]=col[rt]+max(w[rt<<1],w[rt<<1|1]);
}

int query(int L,int R,int l,int r,int rt)
{
	if(L<=l&&R>=r) return w[rt];
	int mid=l+r>>1,ret=0;
	if(L<=mid) ret=max(ret,query(L,R,l,mid,rt<<1));
	if(R>mid)  ret=max(ret,query(L,R,mid+1,r,rt<<1|1));
	return col[rt]+ret;
}

vector<int> a[N];

int main()
{
	n=in(),m=in();
	for(int i=1;i<=n;i++)
	{
		int x=in(),y=in();
		a[x].push_back(y);
	}
	int ans=n-m;
	build(0,m+1,1);
	for(int i=0;i<=m;i++)
	{
		for(auto x:a[i]) add(0,x,0,m+1,1);
		ans=max(ans,query(i+1,m+1,0,m+1,1)-i-m-1);
	}
	printf("%d\n",ans);
	return 0;
}

