#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cstring>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <queue>
#include <vector>
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
using namespace std;
const int maxn=1e5+5;
int N1=0,N2=0,D=0,d[maxn];
vector<int>G[maxn];
queue<int>Q;
int ans=0;
void Topsort()
{
int flag=0;
while (!Q.empty()) Q.pop();
int fir=N1+1,las=N1+N2;
for(int i=fir;i<=las;i++){
if(d[i]!=0){
flag=1;break;
}
}
if(flag==0){
for(int i=fir;i<=las;i++){
if(d[i]==0)Q.push(i);
}
for(int i=1;i<=N1;i++){
if(d[i]==0)Q.push(i);
}
}
else{
for(int i=1;i<=las;i++){
if(d[i]==0)Q.push(i);
}
}
int i=0,u=0,v=0,flag1=0,flag2=0;
while (!Q.empty()) {
u=Q.front();Q.pop();
if(u>N1){
flag1=1;//表示右边盘子
if(flag1!=flag2){
ans+=1;
flag2=flag1;
}
}
else{
flag1=2;//表示左边盘子
if(flag1!=flag2){
ans+=1;
flag2=flag1;
}
}
for(i=0;i<G[u].size();i++){
v=G[u][i];
d[v]-=1;
if(d[v]==0)Q.push(v);
}
}
}
int main()
{
int x=0,y=0;
while (scanf("%d %d %d",&N1,&N2,&D)) {
if(N1==0&&N2==0&&D==0) break;
memset(d,0,sizeof(d));
for(int i=0;i<maxn;i++)G[i].clear();
ans=0;
for(int i=0;i<D;i++){
scanf("%d %d",&x,&y);
G[y].push_back(x);
d[x]+=1;
}
Topsort();
printf("%d\n",ans+1);
}
return 0;
}