//要满足题设,我们需要让速度单调递增,不要求严格
//单向道,线性,位置需要升序排序,采用结构体.
//对于速度,我们需要动态规划
//创建一个dp[i],对vi[i]>=dp.back()的尾插,对vi[i]<dp.back()的,upper_bound找到d里严格大于他的一个并替换
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct Drive{
long long x;
long long v;
};
bool compare(const Drive a,const Drive b){
return a.x<b.x;
}
int main(){
int n;
cin>>n;
vector<Drive> d(n);
for(int i=0;i<n;i++){
cin>>d[i].x>>d[i].v;
}
sort(d.begin(),d.end(),compare);
vector<long long> vi(n);
for(int i=0;i<n;i++){
vi[i]=d[i].v;
}
vector<long long> dp;
dp.push_back(vi[0]);
for(int i=1;i<n;i++){
if(vi[i]>=dp.back()){
dp.push_back(vi[i]);
}else{
*upper_bound(dp.begin(),dp.end(),vi[i])=vi[i];
}
}
int len=dp.size();
cout<<n-len<<"\n";
return 0;
}