#include #pragma GCC optimize("Ofast") //#pragma GCC target("avx2") #pragma GCC optimize("unroll-loops") using namespace std; //#include //#include //namespace mp=boost::multiprecision; //#define mulint mp::cpp_int //#define mulfloat mp::cpp_dec_float_100 struct __INIT{__INIT(){cin.tie(0);ios::sync_with_stdio(false);cout<=0;(i)--) #define flc(x) __builtin_popcountll(x) #define pint pair #define pdouble pair #define plint pair #define fi first #define se second #define all(x) x.begin(),x.end() #define vec vector #define nep(x) next_permutation(all(x)) typedef long long lint; int dx[8]={1,1,0,-1,-1,-1,0,1}; int dy[8]={0,1,1,1,0,-1,-1,-1}; const int MAX_N=3e5+5; templatebool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b bucket[MAX_N/1000]; constexpr int MOD=1000000007; //constexpr int MOD=998244353; /*#include using namespace atcoder; typedef __int128_t llint;*/ lint LIS(int* A,int L){ lint DP[L]; fill(DP,DP+L,LINF); rep(i,L) *lower_bound(DP,DP+L,A[i])=A[i]; return lower_bound(DP,DP+L,INF)-DP; } int main(void){ int N,M,Q; cin >> N >> M >> Q; lint A[Q],B[Q]; rep(i,Q) cin >> A[i] >> B[i]; plint p[Q]; rep(i,Q) p[i].fi=A[i],p[i].se=B[i]; sort(p,p+Q); int C[Q]; rep(i,Q) C[i]=p[i].se; cout << LIS(C,Q) << endl; }