#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <string>
#include <algorithm>
#include <iostream>
#include <string>
#include <map>
#include <set>
#include <functional>
#include <iostream>
#define MOD 1000000007LL
using namespace std;
typedef long long ll;
typedef pair<int,int> P;

int n,m;
vector<P> vec;

bool flag[200005];

int main(void){
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++){
		P p;
		scanf("%d%d",&p.first,&p.second);
		vec.push_back(p);
	}
	sort(vec.begin(),vec.end());
	reverse(vec.begin(),vec.end());
	priority_queue<P> que;
	priority_queue<P,vector<P>,greater<P> > que2;
	int l=0,cnt=1;
	memset(flag,false,sizeof(flag));
	for(int i=m;i>=1;i--){
		while(l<n && vec[l].first>=i){
			que.push(P(vec[l].second,l));
			l++;
		}
		if(que.size()){
			P p=que.top();
			que.pop();
			cnt++;
		}
	}
	for(;l<n;l++){
		que.push(P(vec[l].second,l));
	}
	while(que.size()){
		P p=que.top();
		que.pop();
		que2.push(p);
	}
	for(int i=cnt;i<=m;i++){
		if(!flag[i]){
			if(que2.size()){
				P p=que2.top();
				if(i>=p.first){
					que2.pop();
				}
			}
		}
	}
	int res=(int)que2.size();
	printf("%d\n",res);
	return 0;
}
