#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
const int inf=1e9;

int gi() {
	int x=0,o=1;char ch=getchar();
	while(!isdigit(ch)&&ch!='-') ch=getchar();
	if(ch=='-') o=-1,ch=getchar();
	while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
	return x*o;
}

int n,m,mx[N<<2],tag[N<<2];
vector<int> vec[N];

#define ls (x<<1)
#define rs (x<<1|1)

void mdf(int x,int v) {
	mx[x]+=v,tag[x]+=v;
}

void down(int x) {
	if(tag[x]) mdf(ls,tag[x]),mdf(rs,tag[x]),tag[x]=0;
}

void modify(int L,int R,int v,int x=1,int l=0,int r=m+1) {
	if(L<=l&&r<=R) return mdf(x,v);
	down(x);
	int mid=(l+r)>>1;
	if(L<=mid) modify(L,R,v,ls,l,mid);
	if(R>mid) modify(L,R,v,rs,mid+1,r);
	mx[x]=max(mx[ls],mx[rs]);
}

int main() {
	cin>>n>>m;
	for(int i=1;i<=n;i++) {
		int l=gi(),r=gi();
		vec[l].push_back(r);
	}
	int ans=max(0,n-m);
	for(int i=0;i<=m+1;i++) modify(i,i,-(m-i+1));
	for(int i=0;i<=m;i++) {
		modify(i,i,-inf);
		if(i) modify(i+1,m+1,-1);
		for(auto x:vec[i]) modify(i+1,x,1);
		ans=max(ans,mx[1]);
	}
	cout<<ans;
	return 0;
}
