#include <bits/stdc++.h>
using namespace std;
mt19937 rnd(chrono::system_clock::now().time_since_epoch().count());
const int MAXN = 200100, MAXK = 25;
const long long MOD = 998244353;
int n, m, q;
int par[2 * MAXN];
int parent(int a) { return par[a] = par[a] == a ? a : parent(par[a]); }
bool same(int a, int b) { return parent(a) == parent(b); }
void unite(int a, int b) {
  a = parent(a), b = parent(b);
  if (a == b) return;
  par[b] = a;
}
set<int> pars;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(nullptr);
  cin >> n >> m >> q;
  for (int i = (0); i <= (2 * MAXN - 1); i++) par[i] = i;
  for (int O = (1); O <= ((q)); O++) {
    int x, y;
    cin >> x >> y;
    unite(x, y + MAXN);
  }
  for (int i = (1); i <= (n); i++) pars.insert(parent(i));
  for (int i = (1); i <= (m); i++) pars.insert(parent(i + MAXN));
  cout << pars.size() - 1;
  return 0;
}
