#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")