#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
int n,m,ans,_empty=0,_empty1=0,top=1,cnt1=0;
struct node{int l,r;
friend bool operator <(node a,node b){ return b.r<a.r;}
}p[200010],p1[200010],c;
bool cmp(node a,node b){return a.l<b.l;}
bool cmp1(node a,node b){return a.r<b.r;}
priority_queue<node>q;
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++) scanf("%d%d",&p[i].l,&p[i].r);
    sort(p+1,p+n+1,cmp);
    for(;p[top].l==0&&top<=n;top++) p1[++cnt1]=p[top];
    for (int i=1;i<=m;i++) 
    {
        _empty++;
        for(;p[top].l==i;top++)
        {
            if (_empty) _empty--,q.push(p[top]),ans++;
            else 
            {
                c=q.top();if (p[top].r>c.r) q.pop(),q.push(p[top]),p1[++cnt1]=c;
                else p1[++cnt1]=p[top];
            }
        }
    }
    sort(p1+1,p1+cnt1+1,cmp1);
    top=1;
    if (cnt1)
    {
        for (int i=m-_empty+1;i<=m;i++)
        {
            if (p1[top].r<=i&&top<=cnt1)ans++,top++;
        }        
    }

    printf("%d\n",n-ans);
    
}