#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
struct stick{int len, wid;};
bool cmp(stick a, stick b)
{
return (a.len == b.len ? a.wid > b.wid : a.len > b.len);
}
int main()
{
cin >> n;
vector<stick> info(n);
for(int i = 0; i < n; i++)
cin >> info[i].len >> info[i].wid;
sort(info.begin(), info.end(), cmp);
vector<int> longest;
for(int i = 0; i < n; i++)
{
if(longest.empty() || longest.back() < info[i].wid)
{
longest.push_back(info[i].wid);
}
else
{
int left = 0, right = longest.size() - 1;
while(left < right)
{
int mid = (left + right) / 2;
if(longest[mid] <= info[i].wid)
left = mid + 1;
else
right = mid;
}
longest[right] = info[i].wid;
}
}
cout << longest.size() << endl;
return 0;
}