#include<bits/stdc++.h>
using namespace std;
#define maxn 2000000
//定义数组fa存储根结点
int fa[maxn+1];
//初始化每棵树根节点为本身
void init(){
for(int i = 0; i <= maxn; i++){
fa[i] = i;
}
}
//查找父节点
int find(int x){
if(fa[x]==x) return x;
else{
//压缩,父节点的值赋值为根节点
//压缩后可提高查找效率
fa[x] = find(fa[x]);
//返回父节点
return fa[x];
}
}
//合并
void merge(int i, int j){
//将i和j结点连接到同一个父节点上
fa[find(i)] = find(j);
}
int n,m;
int k;//k次合根
int main(){
init();
cin>>n>>m>>k;
int a,b;
for(int i = 1; i <= k; i++){
cin>>a>>b;
merge(a,b);
}
int ans = 0;
for(int i = 1; i <= n*m; i++){
//找根节点
if(fa[i]==i){
ans++;
}
}
cout<<ans<<endl;
return 0;
}
/*
5 4
16
2 3
1 5
5 9
4 8
7 8
9 10
10 11
11 12
10 14
12 16
14 18
17 18
15 19
19 29
9 13
13 17
*/