#include<iostream>
#include<cstdio>
#include<algorithm>
const int N=1005;
const int M=5e4+5;
using namespace std;
int n1,n2,m,ans;
int fir[N],cur[N],cnt;
int b[N];
struct edge
{
int v,nxt;
}e[M];
void add(int u,int v)
{
e[++cnt].v=v;
e[cnt].nxt=fir[u];
fir[u]=cnt;
}
bool found(int x)
{
for(int i=cur[x];i!=0;i=e[i].nxt)
{
cur[x]=i;
int to=e[i].v;
if(b[to]==0)
{
b[to]=x;
return 1;
}
else if(b[to]<x)
{
int tmp=b[to];
b[to]=x;
if(found(tmp)==1)return 1;
else if(found(tmp)==0)b[to]=tmp;
}
}
return 0;
}
int main()
{
scanf("%d%d%d",&n1,&n2,&m);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
}
for(int i=1;i<=n1;i++)cur[i]=fir[i];
for(int i=1;i<=n1;i++)
{
if(found(i)==1)ans++;
}
printf("%d\n",ans);
return 0;
}