#include<iostream>
#include<vector>

#define ll long long

using namespace std;

//DFS nacin

int BrojZonaZaBojenje(vector<vector<ll>> Tabla) {
	vector<vector<ll>> Grupacija;
	vector<ll> GrupacijaInd;
	ll SledecaGrupa;
	ll i, x, y, left, up, cnt;

	Grupacija = Tabla;
	for (i = 0; i < Grupacija.size(); i++) {
		Grupacija[i].assign(Grupacija[i].size(), 0);
	}

	GrupacijaInd.push_back(0);
	SledecaGrupa = 1;

	for (y = 0; y < Tabla.size(); y++) {
		for (x = 0; x < Tabla[y].size(); x++) {
			if (Tabla[y][x] == 0) continue;

			left = 0;
			if (x != 0) left = Grupacija[y][x - 1];
			left = GrupacijaInd[left];

			up = 0;
			if (y != 0) up = Grupacija[y - 1][x];
			up = GrupacijaInd[up];

			if (left == 0 && up == 0) {
				Grupacija[y][x] = SledecaGrupa;
				GrupacijaInd.push_back(SledecaGrupa);
				SledecaGrupa++;
			}
			else if (left != 0 && up != 0) {
				if (left > up) {
					Grupacija[y][x] = up;
					GrupacijaInd[left] = up;
				}
				else {
					Grupacija[y][x] = left;
					GrupacijaInd[up] = left;
				}
			}
			else if (up == 0) {
				Grupacija[y][x] = left;
			}
			else {
				Grupacija[y][x] = up;
			}
		}
	}

	cnt = 0;
	for (i = 1; i < GrupacijaInd.size(); i++) {
		if (i == GrupacijaInd[i]) cnt++;
	}

	return cnt;
}
int main() {
	ll n,m,k;
	cin >> n >> m >> k;
	vector<vector<ll>>Tabla(n,vector<ll>(m,1));
	for (ll i = 0; i < k; i++) {
		ll x, y;
		cin >> x >> y;
		Tabla[x - 1][y - 1] = 0;
	}
	
	cout<<BrojZonaZaBojenje(Tabla);
	return 0;
}