/*  Bismillahir Rahmanir Rahim  */

#include <bits/stdc++.h>

using namespace std;

typedef pair <int, int> pii;

const int N = 200005;

int n, m, done[N];
int L[N], R[N], ans;
vector <int> lf[N], rf[N];

int get(int st){
	ans = 0;
	int have = 0, flag = 0;
	priority_queue <pii> q;
	memset(done, 0, sizeof(done));
	for(int i = m; i >= 1; --i){
		for(auto u : lf[i]){
			q.push({R[u], u});
		}
		if(i > st) continue;
		if(q.empty()) flag = -1;
		else{
			done[q.top().second] = 1;
			q.pop();	
			++ans;
		}
	}
	for(int i = 1; i <= m; ++i){
		for(auto u : rf[i]){
			have += !done[u];
		}
		if(i <= st) continue;
		if(!have) flag = +1;
		else --have, ++ans;
	}
	return flag;
}

void solve(){
	int lo = 0, hi = m;
	while(lo < hi){
		int mid = (lo + hi) / 2;
		int ok = get(mid);
		if(ok == 0) lo = hi = mid;
		else if(ok == +1) lo = mid + 1;
		else hi = mid - 1;
	}
	get(lo);
	printf("%d\n", n - ans);
}

int main(){
	scanf("%d %d", &n, &m);
	for(int i = 1; i <= n; ++i){
		scanf("%d %d", &L[i], &R[i]);
		lf[ L[i] ].push_back( i );
		rf[ R[i] ].push_back( i );
	}
	solve();
	return 0;
}