#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//贪心+二分查找
int main() {
int n;
cin>>n;
vector<vector<int>> arr(n,vector(2,0));
for(int i=0;i<n;i++){
cin>>arr[i][0];
cin>>arr[i][1];
}
//排序,信封,以宽度升序,同宽度,高度降序排列
if(n==0){
cout<<0;
return 0;
}
sort(arr.begin(),arr.end(),[](const vector<int>& a,const vector<int>& b){
return a[0]<b[0] || a[0]==b[0]&& a[1]>b[1];
});
//然后新建一个tail,tails[i] 表示长度为 i+1 的递增子序列的最小末尾值
vector<int> tail;
for(auto& ele:arr){
int h=ele[1];
//返回第一个满足 *it >= value 的迭代器 it
auto it=lower_bound(tail.begin(), tail.end(), h);
if(it==tail.end()){
tail.push_back(h);
}else{
*it=h;
}
}
cout<<tail.size();
return 0;
}
// 64 位输出请用 printf("%lld")