#include<bits/stdc++.h>
using namespace std;
#define int long long
int sz[1000005];
bool vis[1000005];
int fin(int n){
while(n!=sz[n]){
n = sz[n];
}
return n;
}
int ans[10050];
void unio(int a,int b){
if(!vis[a] && !vis[b]){
sz[min(a,b)] = max(a,b);
vis[a] = true;
vis[b] = true;
}
else
if(vis[a]){
sz[b] = fin(a);
vis[b] = true;
}
else
if(vis[b]){
sz[a] = fin(b);
vis[a] = true;
}
else
if(vis[a] && vis[b]){
sz[min(fin(a),fin(b))] = max(fin(a),fin(b));
}
}
signed main(){
int n=0,m=0;
cin>>n>>m;
int t = 0;
cin>>t;
for(int i = 1;i<= n*m;i++){
sz[i] = i;
}
while(t--){
int l,r;
cin>>l>>r;
unio(l,r);
}
int an = 0;
for(int i= 0;i<=n*m;i++){
if(ans[i])
an++;
}
cout<<an;
return 0;
}