#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <queue>
#include <utility>
#include <vector>
using namespace std;

#define Y first
#define X second

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

int w, h;
vector<int> x1(MAX), y1(MAX), x2(MAX), y2(MAX), lis;
vector<vector<int> > board(MAX * 2 + 2, vector<int>(MAX * 2 + 2));

void compress(int& size, vector<int>& c1, vector<int>& c2) {
	lis.clear();
	lis.reserve(c1.size() * 2 + 2);

	lis.push_back(0);
	lis.push_back(size);

	for(int i = 0; i < c1.size(); ++i) {
		lis.push_back(c1[i]);
		lis.push_back(c2[i]);
	}

	sort(lis.begin(), lis.end());
	lis.erase(unique(lis.begin(), lis.end()), lis.end());

	for(int i = 0; i < c1.size(); ++i) {
		c1[i] = lower_bound(lis.begin(), lis.end(), c1[i]) - lis.begin();
		c2[i] = lower_bound(lis.begin(), lis.end(), c2[i]) - lis.begin();
	}

    size = lis.size();
}

void bfs(int y, int x) {
	queue<pair<int, int> > que;
	que.push(make_pair(y, x));
	board[y][x] = 1;

	while(!que.empty()) {
		pair<int, int> p = que.front();
		que.pop();

		for(int i = 0; i < 4; ++i) {
			int nx = p.X + dx[i];
			int ny = p.Y + dy[i];

			if(nx < 0 || nx >= w - 1 || ny < 0 || ny >= h - 1 || board[ny][nx])
				continue;

			board[ny][nx] = 1;
   			que.push(make_pair(ny, nx));
		}
	}
}

int main() {
	cin.tie(0);
	ios::sync_with_stdio(false);

	while(cin >> w >> h, w | h) {
		int n;
		cin >> n;

		for(int i = 0; i < n; ++i)
			cin >> x1[i] >> y1[i] >> x2[i] >> y2[i];

		compress(w, x1, x2);
		compress(h, y1, y2);

		for(int i = 0; i < h; ++i)
			fill(board[i].begin(), board[i].end(), 0);

		for(int i = 0; i < n; ++i) {
			board[y1[i]][x1[i]] += 1;
   			board[y1[i]][x2[i]] -= 1;
   			board[y2[i]][x1[i]] -= 1;
   			board[y2[i]][x2[i]] += 1;
		}

		for(int i = 0; i < h; ++i)
			for(int j = 0; j < w - 1; ++j)
				board[i][j + 1] += board[i][j];

		for(int j = 0; j < w; ++j)
			for(int i = 0; i < h - 1; ++i)
				board[i + 1][j] += board[i][j];

		for(int i = 0; i < h; ++i)
			board[i][w - 1] = 1;

		for(int i = 0; i < w; ++i)
			board[h - 1][i] = 1;

		int ans = 0;
		for(int i = 0; i < h; ++i) {
			for(int j = 0; j < w; ++j) {
				if(!board[i][j]) {
					++ans;
					bfs(i, j);
				}
			}
		}

		cout << ans << endl;
	}

	return EXIT_SUCCESS;
}