#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i = a; i < (b); ++i)
#define rrep(i,a,b) for(int i = b; i --> (a);)
#define all(v) v.begin(),v.end()
#define trav(x,v) for(auto &x : v)
#define sz(v) (int)(v).size()
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> pii;

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	int n, m;
	cin >> n >> m;
	vector<pii> lr(n);
	trav(pa, lr) cin >> pa.first >> pa.second;
	sort(all(lr));

	int mx = 0;

	auto f = [&](int piv){
		// sätt ls i [1,piv), rs i [piv, m]
		// 1 <= piv <= m+1
		int l = 0, r = 0;
		int ix = n-1;
		priority_queue<int> rs;
		rrep(pos,0,piv){
			while(ix>=0 && lr[ix].first >= pos){
				rs.push(lr[ix].second);
				--ix;
			}
			if(pos==0) continue;
			if(!rs.empty()){
				++l;
				rs.pop();
			}
		}
		rrep(pos,piv,m+1){
			while(!rs.empty() && rs.top() > pos)
				rs.pop();
			if(rs.empty()) break;
			++r;
			rs.pop();
		}
		mx = max(mx, l+r);
		return pii(l,r);
	};

	int lo = 1, hi = m+2;
	while(lo+1 < hi){
		int mi = (lo+hi)/2;
		pii pa = f(mi);
		if(pa.first != mi-1) hi = mi;
		else lo = mi;
	}
	f(lo);
	cout << n-mx << endl;
}