#include <bits/stdc++.h>
#define ll long long
#define INF 999999999
#define MOD 1000000007
#define rep(i,n) for(int i=0;i<n;++i)

using namespace std;

typedef pair<int,int>P;

const int MAX_N = 505;

int X1[MAX_N],X2[MAX_N],Y1[MAX_N],Y2[MAX_N];
int w,h,n;
bool fld[MAX_N*6][MAX_N*6];

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

int main()
{
	int dx[4] = {-1,0,0,1};
	int dy[4] = {0,-1,1,0};
	while(1){
	cin >> w >> h;
	if(w==0&&h==0){
		break;
	}else{
	cin >> n;
	rep(i,n){
		int p,q,r,s;
		scanf("%d%d%d%d",&p,&q,&r,&s);
		X1[i] = p+1;
		X2[i] = r;
		Y1[i] = q+1;
		Y2[i] = s;
	}
	w = compress(X1,X2,w);
	h = compress(Y1,Y2,h);
	memset(fld,0,sizeof(fld));
	rep(i,n){
		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;
	rep(y,h){
		rep(x,w){
			if(fld[y][x]){
				continue;
			}
			ans++;
			queue<P> que;
			que.push(P(x,y));
			while(!que.empty()){
				int sx = que.front().first;
				int sy = que.front().second;
				que.pop();
				rep(i,4){
					int tx = sx + dx[i];
					int ty = sy + dy[i];
					if(tx<0||w<=tx||ty<0||h<=ty){
						continue;
					}
					if(fld[ty][tx]){
						continue;
					}
					que.push(P(tx,ty));
					fld[ty][tx] = true;
				}
			}
		}
	}
	printf("%d\n",ans);
	}
	}
	return 0;
}