#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<sstream>
#include<utility>
#include<map>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;

int C[4][1000005],W,H,N,mv[5]={1,0,-1,0,1};//x1 y1 x2 y2
bool fld[6005][6005];

void dbg()
{
	for(int i=0;i<H;i++,puts(""))
		for(int j=0;j<W;j++)
			printf("%s",fld[i][j]?"■":"□");
	puts("");
}

int compress(int *x1,int *x2,int w)
{
	vector<int>xs;
	for(int i=0;i<N;i++)
		for(int d=-1;d<2;d++)
		{
			int tx1=x1[i]+d,tx2=x2[i]+d;
			if(0<=tx1&&tx1<w)xs.push_back(tx1);
			if(0<=tx2&&tx2<w)xs.push_back(tx2);
		}
		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()
{
	for(;scanf("%d%d",&W,&H),H+W;)
	{
		for(int i=!scanf("%d",&N);i<N;i++)
			scanf("%d%d%d%d",&C[0][i],&C[1][i],&C[2][i],&C[3][i]);
		W=compress(C[0],C[2],W);
		H=compress(C[1],C[3],H);
		memset(fld,0,sizeof(fld));
		for(int i=0;i<N;i++)
		{
			for(int y=C[1][i];y<C[3][i];y++)
				for(int x=C[0][i];x<C[2][i];x++)
					fld[y][x]=1;
		}
		int ans=0;
		for(int i=0;i<H;i++)
			for(int j=0;j<W;j++)
			{
				if(fld[i][j]==true)continue;
				ans++;
				P t=make_pair(i,j);
				queue<P>Q;
				Q.push(t);
				while(!Q.empty())
				{
					t=Q.front();Q.pop();
					if(fld[t.first][t.second])continue;
					fld[t.first][t.second]=true;
					for(int m=0;m<4;m++)
					{
						int ny=t.first+mv[m],nx=t.second+mv[m+1];
						if(0<=ny&&ny<H&&0<=nx&&nx<W&&!fld[ny][nx])
						{
							
							Q.push(make_pair(ny,nx));
						}
					}
				}
			}
		printf("%d\n",ans);
	}
}