#include <cstdio>#include <algorithm>using namespace std;const int maxn=1e6+5;int n,m,p;struct pnt{ int x,y; pnt(){x=y=0;} pnt(int x,int y){this->x=x;this->y=y;} bool operator < (pnt p2)const {return x!=p2.x?x<p2.x:y<p2.y;} bool operator > (pnt p2)const {return x!=p2.x?x>p2.x:y>p2.y;} pnt operator = (const pnt p2){x=p2.x;y=p2.y;return *this;}};pnt pt[maxn];int dp[maxn],len;void replace(int x){ int l=0,r=len; while(r>l){ int m=(l+r)>>1; if(dp[m]>x){ l=m+1; } else { r=m; } } if(dp[l]<x&&l<len)dp[l]=x;}int main(){ while(scanf("%d%d%d",&n,&m,&p)==3){ len=0; for(int i=0;i<p;i++){ scanf("%d%d",&pt[i].x,&pt[i].y); } sort(pt,pt+p); if(p>0)dp[len++]=pt[0].y; for(int i=1;i<p;i++){ if(dp[len-1]>pt[i].y){ dp[len++]=pt[i].y; } else { replace(pt[i].y); } } printf("%dn",len); } return 0;}