#include<bits/stdc++.h>

using namespace std;
#define X first
#define Y second
#define pb push_back
typedef double db;
typedef long long ll;
typedef pair<int,int> P;
const int MAXN=2e5+10;
vector<int> p[MAXN];int n,m;

#define mid ((l+r)>>1)
#define ls k<<1
#define rs k<<1|1
#define lc k<<1,l,mid
#define rc k<<1|1,mid+1,r
int mx[MAXN<<2],add[MAXN<<2];
void pushup(int k)
{mx[k]=add[k]+max(mx[ls],mx[rs]);}
void build(int k,int l,int r)
{
    if(l==r){mx[k]=l;return;}
    build(lc);build(rc);pushup(k);
}
void update(int a,int b,int k,int l,int r)
{
    if(a<=l&&r<=b)
    {mx[k]++;add[k]++;return;}
    if(a<=mid) update(a,b,lc);
    if(b>mid) update(a,b,rc);
    pushup(k); 
}
int query(int a,int b,int k,int l,int r)
{
    if(a<=l&&r<=b) return mx[k];
    int ret=-1<<28;
    if(a<=mid) ret=max(ret,query(a,b,lc));
    if(b>mid) ret=max(ret,query(a,b,rc));
    return ret+add[k];
}

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        int l,r;
        scanf("%d%d",&l,&r);
        p[l].pb(r);
    }
    build(1,0,m+1);int res=0;
    for(int i=0;i<=m+1;i++)
    {
        for(auto j:p[i]) update(0,j,1,0,m+1);
        res=max(res,query(i+1,m+1,1,0,m+1)-m-i-1);
    }
    printf("%d",max(res,n-m));
    return 0;
}