#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<stack>
#include<climits>
#include<cstring>
#include<queue>
using namespace std;

typedef unsigned long long ull;

const ull INF = ULLONG_MAX/3;

void add(int s, int t, ull x, vector<ull> &xList, vector<ull> &sxList){
    int nn = xList.size();
    int sn = sxList.size();
    int ss = s/sn;
    int tt = t/sn;
    if(ss == tt){
        for (int i=0;i<t-s+1;i++){
            xList[s+i] += x;
        }
    }else{
        for(int i=s;i<(ss+1)*sn;i++){
            xList[i] += x;
        }

        for(int i=tt*sn;i<t+1;i++){
            xList[i] += x;
        }

        for(int i=ss+1;i<tt;i++){
            sxList[i] += x;
        }
    }
}

ull get(int ind, vector<ull> &xList, vector<ull> &sxList){
    int sn = sxList.size();
    return xList[ind] + sxList[ind/sn];
}

int main(){
    int N, T, l ,r;
    cin >> N >> T;
    int sn = sqrt(T-1) + 1;

    vector<ull> xList(sn*sn, 0ull);
    vector<ull> sxList(sn, 0ull);

    for (int i=0;i<N;i++){
        cin >> l >> r;
        add(l, r-1, 1, xList, sxList);
    }

    ull M = 0ull;
    for(int i=0;i<T;i++){
        M = max(M, get(i, xList, sxList));
    }
    cout << M << endl;
    return 0;
}