/*
大字题意是和俄罗斯装娃娃类似,就是输入几组数(一组两个),然后找出有多少个一组数字都大于另一组数字得个数.
思路如下:先用sort排好第一个数字的顺序,然后第二个数字就相当于求最长上升子序列,相当于先把数据放入栈中,然后再放时,判断大于栈顶元素就放入,小于,找到以一个小于的,替换(运用了动态规划和二分法的思想)
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
static bool cmp(const pair<int, int> &a, const pair<int, int> &b)
{
return a.first == b.first ? a.second < b.second : a.first < b.first;
}
int main()
{
int N; cin >> N;
vector<pair<int, int> > data(N);
for(int i = 0; i < N; ++i)
cin >> data[i].first >> data[i].second;
sort(data.begin(), data.end(), cmp);
vector<int> ivec;
for (int i = 0; i < N; ++i)
{
if (ivec.size() == 0 || ivec.back() <= data[i].second)
ivec.push_back(data[i].second);
else
{
int low = 0, high = ivec.size() - 1;
while (low < high)
{
int mid = (low + high) / 2;
if (ivec[mid] <= data[i].second)
low = mid + 1;
else
high = mid;
}
ivec[low] = data[i].second;
}
}
cout << ivec.size() << endl;
return 0;
}