#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> pii;
typedef long long ll;
typedef vector<int> vi;

#define pb push_back
#define eb emplace_back
#define mp make_pair
#define fi first
#define se second
#define rep(i,n) rep2(i,0,n)
#define rep2(i,m,n) for(int i=m;i<(n);i++)
#define ALL(c) (c).begin(),(c).end()

const int SZ = (1 << 18);

struct starry_sky_tree {
    int all[SZ * 2], ma[SZ * 2];

    void init() {
        memset(all, 0, sizeof(all));
        memset(ma, 0, sizeof(ma));
    }

    void add(int a, int b, int x, int k = 0, int l = 0, int r = SZ) {
        if (b <= l || r <= a) return ;
        if (a <= l && r <= b) {
            all[k] += x; return ; 
        }

        add(a, b, x, k * 2 + 1, l, (l + r) / 2);
        add(a, b, x, k * 2 + 2, (l + r) / 2, r);
        ma[k] = max(ma[k * 2 + 1] + all[k * 2 + 1], ma[k * 2 + 2] + all[k * 2 + 2]);
    }

    int get() { return ma[0] + all[0]; }
} seg;

int N, M;

int main() {
	cin >> N >> M;
	seg.init();

	vector<pii> vec;

	rep(i, N) {
		int l, r;
		cin >> l >> r;
		vec.eb(l, r);
	}

	for (int i = 1; i <= M + 1; ++i) {
		seg.add(i, i + 1, i);
	}

	sort(ALL(vec));

	int t = 0;

	for (auto& p : vec) {
		seg.add(1, p.se + 1, 1);

		int x = seg.get() - M - p.fi - 1;
		t = max(t, x);
	}

	cout << max(t, N - M) << endl;

    return 0;
}