#include <cstdio>
#include <cctype>
#include <algorithm>
#include <functional>
#define repu(i,x,y) for (int i=x; i<=y; ++i)
#define repd(i,x,y) for (int i=x; i>=y; --i)
using namespace std;

int n,m,p,heap[200100],tot,cnt[200100],ans;
struct data
{
    int r;
    data *nxt;
} pool[200100],*tp=pool,*fst[200100];

int getint()
{
    char ch;
    while (!isdigit(ch=getchar()));
    int x=ch-'0';;
    for (; isdigit(ch=getchar()); x=x*10+ch-'0');
    return x;
}

int main()
{
    scanf("%d%d",&n,&m),ans=n;
    repu(i,1,n)
    {
        int l=getint(),r=getint();
        if (!l)
            ++cnt[r];
        *tp=(data){r,fst[l]},fst[l]=tp++;
    }
    p=1;
    repu(i,1,m)
        for (data *j=fst[i]; j; j=j->nxt)
            if (p<=i)
                ++p,--ans,heap[++tot]=j->r,push_heap(heap+1,heap+1+tot,greater<int>());
            else
            {
                int r=j->r;
                if (heap[1]<r)
                {
                    pop_heap(heap+1,heap+1+tot,greater<int>());
                    swap(r,heap[tot]),push_heap(heap+1,heap+1+tot,greater<int>());
                }
                ++cnt[r];
            }
    repu(i,1,m)
        for (; cnt[i] && p<=m; --cnt[i],--ans,p=max(p,i)+1);
    printf("%d\n",ans);
    return 0;
}