#include <bits/stdc++.h>
using namespace std;
#define rep(i,n)	for(int i=0;i<n;i++)
#define itr(i,a)	for(auto i=a.begin(),i!=a.end();i++)
#define mp	make_pair
#define pb	push_back
int w,h;
bool grd[2020][2020];
int main(){
	while(true){
		cin>>w>>h;
		if(w==0)	return 0;
		int n;	cin>>n;
		int x1[n],y1[n],x2[n],y2[n];
		set<int> xdata,ydata;
		xdata.insert(0);	xdata.insert(w);
		ydata.insert(0);	ydata.insert(h);
		rep(i,n){
			cin>>x1[i]>>y1[i]>>x2[i]>>y2[i];
			xdata.insert(x1[i]);	xdata.insert(x2[i]);
			ydata.insert(y1[i]);	ydata.insert(y2[i]);
		}
		vector<int> lx(1000010),ly(1000010);
		int cw=xdata.size(),ch=ydata.size();
		int t;	set<int>::iterator it;
		for(it=xdata.begin(),t=0;it!=xdata.end();it++,t++)	lx[*it]=t;
		for(it=ydata.begin(),t=0;it!=ydata.end();t++,it++)	ly[*it]=t;
		rep(i,ch)	rep(j,cw)	grd[i][j]=false;
		rep(i,n){
			int l=lx[x1[i]],r=lx[x2[i]],o=ly[y1[i]],u=ly[y2[i]];
			for(int y=o;y<u;y++)	for(int x=l;x<r;x++)	grd[y][x]=true;
		}
		int cnt=0;
		ch--,cw--;
		int mx[]={1,0,0,-1},my[]={0,1,-1,0};
		rep(y,ch)	rep(x,cw){
			if(grd[y][x])	continue;
			queue<pair<int,int>> q;	q.push(mp(y,x));
			while(!q.empty()){
				pair<int,int> now=q.front();	q.pop();
				int nx=now.second,ny=now.first;
				if(grd[ny][nx])	continue;
				grd[ny][nx]=true;
				rep(i,4){
					int xx=nx+mx[i],yy=ny+my[i];
					if((0<=xx&&xx<cw)&&(0<=yy&&yy<ch)&&(!grd[yy][xx])){
						q.push(mp(yy,xx));
					}
				}
			}
			cnt++;
		}
		cout<<cnt<<endl;
	}
}