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

typedef pair<int,int> P;

int dx[] = {1,0,-1,0},dy[] = {0,1,0,-1};
int h,w,n;
bool filled[6000][6000];

int compress(int* x1,int* x2,int len){
	vector<int> xs;
	for(int i = 0;i < n;i++){
		for(int j = -1;j <= 1;j++){
			int nx1 = x1[i] + j,nx2 = x2[i] + j;
			if(nx1 >= 0 && nx1 < len) xs.push_back(nx1);
			if(nx2 >= 0 && nx2 < len) xs.push_back(nx2);
		}
	}
	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();
}

int main(){
	while(1){
		cin >> w >> h;
		if(!h && !w) break;
		cin >> n;
		for(int i = 0;i < 6000;i++) for(int j = 0;j < 6000;j++) filled[i][j] = 0;
		int x1[1000],x2[1000],y1[1000],y2[1000];
		for(int i = 0;i < n;i++){
			int a,b,c,d;
			cin >> a >> b >> c >> d;
			x1[i] = a;
			y1[i] = b;
			x2[i] = c - 1;
			y2[i] = d - 1;
		}
		w = compress(x1,x2,w);
		h = compress(y1,y2,h);
		for(int i = 0;i < n;i++){
			for(int j = x1[i];j <= x2[i];j++){
				for(int k = y1[i];k <= y2[i];k++){
					filled[j][k] = true;
				}
			}
		}
		/*for(int i = h - 1;i >= 0;i--){
			for(int j = 0;j < w;j++){
				cout << filled[j][i];
			}
			cout << endl;
		}*/
		queue<P> que;
		int cnt = 0;
		for(int i = 0;i < w;i++){
			for(int j = 0;j < h;j++){
				if(filled[i][j]) continue;
				cnt++;
				que.push(P(i,j));
				while(!que.empty()){
					int sx = que.front().first,sy = que.front().second;
					que.pop();
					for(int i = 0;i < 4;i++){
						int x = sx + dx[i],y = sy + dy[i];
						if(x >= 0 && x < w && y >= 0 && y < h && !filled[x][y]){
							que.push(P(x,y));
							filled[x][y] = true;
						}
					}
				}
			}
		}
		cout << cnt << endl;
	}
	return 0;
}