#include using namespace std; using ll = long long; const ll INF = 1LL << 62; int lis(const vector& a) { int n = (int)a.size(); vector ranks(n); vector dp(n, INF); for (int i = 0; i < n; i++) { ranks[i] = lower_bound(dp.begin(), dp.end(), a[i]) - dp.begin(); dp[ranks[i]] = a[i]; } return *max_element(ranks.begin(), ranks.end()) + 1; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, M, Q; cin >> N >> M >> Q; vector> xs; xs.reserve(Q); for (int i = 0; i < Q; i++) { int A, B; cin >> A >> B; --A; --B; xs.emplace_back(A, B); } sort(xs.begin(), xs.end(), [](const auto& lhs, const auto& rhs) { if (lhs.first != rhs.first) return lhs.first < rhs.first; return lhs.second > rhs.second; }); vector seq; seq.reserve(Q); for (auto [a, b] : xs) { seq.push_back(b); } cout << lis(seq) << '\n'; return 0; }