#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool t[2010][2010];
int n,h,w,z[2010][4];
vector<int> X,Y;
void DFS(int y,int x){
	if(x<0||y<0||x>=w||y>=h)return;
	if(t[y][x])return;
	t[y][x]=true;
	int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
	for(int i=0;i<4;i++){
		int xx=x+dx[i],yy=y+dy[i];
		DFS(yy,xx);
	}
}
int main(){
	while(cin>>w>>h&&w+h){
	cin>>n;
	X.clear();Y.clear();
	for(int i=0;i<n;i++){
		for(int j=0;j<4;j++)cin>>z[i][j];
		X.push_back(z[i][0]),X.push_back(z[i][2]);
		Y.push_back(z[i][1]),Y.push_back(z[i][3]);
	}
	X.push_back(0),X.push_back(w),Y.push_back(0),Y.push_back(h);
	sort(X.begin(),X.end());sort(Y.begin(),Y.end());
	for(int i=0;i<n;i++){
		for(int j=0;j<2;j++){
			z[i][j*2+0]=lower_bound(X.begin(),X.end(),z[i][j*2+0])-X.begin();
			z[i][j*2+1]=lower_bound(Y.begin(),Y.end(),z[i][j*2+1])-Y.begin();
		}
	}
	w=lower_bound(X.begin(),X.end(),w)-X.begin();
	h=lower_bound(Y.begin(),Y.end(),h)-Y.begin();
	for(int i=0;i<=h;i++){
		for(int j=0;j<=w;j++){
			t[i][j]=false;
		}
	}
	for(int k=0;k<n;k++){
		for(int i=z[k][0];i<z[k][2];i++){
			for(int j=z[k][1];j<z[k][3];j++){
				t[j][i]=true;
			}
		}
	}
	int cnt=0;
	for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			if(t[i][j]==false){
				DFS(i,j);
				cnt++;
			}
		}
	}
	cout<<cnt<<endl;}
	return 0;
}