#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
typedef pair<int, int> P;
int w, h, n;
int X1[1200], X2[1200], Y1[1200], Y2[1200];
bool fld[6100][6100];

int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };

int compress(int *x1, int *x2, int w) {
	vector<int>xs;
	for (int i = 0; i < n; i++) {
		for (int d = -1; d <= 1; d++) {
			int tx1 = x1[i] + d;
			int tx2 = x2[i] + d;
			if (0 <= tx1&&tx1 <= w)xs.push_back(tx1);
			if (0 <= tx2&&tx2 <= w)xs.push_back(tx2);
		}
	}
	sort(xs.begin(), xs.end());
	xs.erase(unique(xs.begin(), xs.end()), xs.end());

	for (int i = 0; i < n; i++) {
		x1[i] = find(xs.begin(), xs.end(), x1[i]) - xs.begin();
		x2[i] = find(xs.begin(), xs.end(), x2[i]) - xs.begin();
	}
	return xs.size()-1;
}

int main() {
	while (cin >> w >> h, w, h) {
		w *= 2, h *= 2;
		cin >> n;

		for (int i = 0; i < 1200; i++)X1[i] = 0, X2[i] = 0, Y1[i] = 0, Y2[i] = 0;

		for (int i = 0; i < n; i++) {
			int a, b, c, d;
			cin >> X1[i] >> Y1[i] >> X2[i] >> Y2[i];
			X1[i] *= 2, X2[i] *= 2, Y1[i] *= 2, Y2[i] *= 2;
		}

		int wa = compress(X1, X2, w);
		int ha = compress(Y1, Y2, h);
		for (int i = 0; i < 6002; i++)
			for (int j = 0; j < 6002; j++)fld[i][j] = false;

		for (int i = 0; i < n; i++) {
			for (int y = Y1[i]; y <= Y2[i]; y++) {
				for (int x = X1[i]; x <= X2[i]; x++) {
					fld[y][x] = true;
				}
			}
		}

		int ans = 0;
		for (int y = 0; y <= ha; y++) {
			for (int x = 0; x <= wa; x++) {
				if (fld[y][x])continue;
				ans++;

				queue<P>Q;
				Q.push(P(x, y));
				while (Q.size()) {
					int sx = Q.front().first;
					int sy = Q.front().second;
					Q.pop();

					for (int i = 0; i < 4; i++) {
						int tx = sx + dx[i], ty = sy + dy[i];
						if (tx < 0 || wa < tx || ty < 0 || ha < ty)continue;
						if (fld[ty][tx])continue;
						Q.push(P(tx, ty));
						fld[ty][tx] = true;
					}
				}
			}
		}
		cout << ans << endl;
	}
	return 0;
}