#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
#define all(n) n.begin(),n.end()
struct P{
	int x,y;
	P(){}
	P(int a,int b){x=a,y=b;}
};

vector< pair<P,P> > data;

int compress(vector<int> &ux,int W,char type){
	int width = 0;
	sort(all(ux));
	ux.erase(unique(all(ux)),ux.end());
	int st = (ux[0]?1:0);
	for(int i=1;i<ux.size();i++){
		rep(j,data.size()){
			if(type == 'x'){
				if(data[j].first.x == ux[i-1])
					data[j].first.x = st;
				if(data[j].second.x == ux[i-1])
					data[j].second.x = st;
			}else{
				if(data[j].first.y == ux[i-1])
					data[j].first.y = st;
				if(data[j].second.y == ux[i-1])
					data[j].second.y = st;
			}
		}
		if(ux[i]-1 == ux[i-1]) st += 1;
		else st += 2;
	}
	
	rep(j,data.size()){
		if(type == 'x'){
			if(data[j].first.x == ux.back())
				data[j].first.x = st;
			if(data[j].second.x == ux.back())
				data[j].second.x = st;
		}else{
			if(data[j].first.y == ux.back())
				data[j].first.y = st;
			if(data[j].second.y == ux.back())
				data[j].second.y = st;
		}
	}
	return st+(ux.back()!=W);
}
int main(){
	int W,H;
	while(cin >> W >> H , W){
		int ret = 0;
		vector<int> ux,uy;
		int n; cin >> n;
		data.resize(n);
		rep(i,n){
			cin >> data[i].first.x >> data[i].first.y >> data[i].second.x >> data[i].second.y;
			ux.push_back(data[i].first.x) , ux.push_back(data[i].second.x);
			uy.push_back(data[i].first.y) , uy.push_back(data[i].second.y);
		}
		W = compress(ux,W,'x');
		H = compress(uy,H,'y');
		bool get[1000][1000]={0};
		rep(i,n){
			for(int x = data[i].first.x ; x < data[i].second.x ; x++){
				for(int y = data[i].first.y ; y < data[i].second.y ; y++){
					get[y][x] = 1;
				}
			}
		}
		stack<pair<int,int> > S;
		static const int dx[] = {0,0,-1,1} , dy[]={1,-1,0,0} ;
		rep(i,H)rep(j,W){
			if(get[i][j] == 0){
				ret++;
				S.push(make_pair(i,j));
				while(S.size()){
					int x = S.top().second, y = S.top().first; S.pop();
					rep(i,4){
						int tx = x + dx[i] , ty = y + dy[i];
						if(ty >= 0 && tx >= 0 && ty < H && tx < W && get[ty][tx] == 0){
							get[ty][tx] = 1;
							S.push(make_pair(ty,tx));
						}
					}
				}
			}
		}
		cout << ret << endl;
	}
}