//43
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>

using namespace std;

int w,h;
int n;

int cmp(int *a,int *b,int l){
  int *p[2]={a,b};
  vector<int> v;
  for(int j=0;j<2;j++){
    for(int i=0;i<n;i++){
      for(int d=-1;d<=1;d++){
	int cp=p[j][i]+d;
	if(0<=cp&&cp<l){
	  v.push_back(cp);
	}
      }
    }
  }
  sort(v.begin(),v.end());
  v.erase(unique(v.begin(),v.end()),v.end());
  for(int i=0;i<2;i++){
    for(int j=0;j<n;j++){
      p[i][j]=find(v.begin(),v.end(),p[i][j])-v.begin();
    }
  }
  return v.size();
}

int main(){
  while(cin>>w>>h,w|h){
    cin>>n;
    int l[1000],r[1000],t[1000],b[1000];
    for(int i=0;i<n;i++){
      cin>>l[i]>>t[i]>>r[i]>>b[i];
    }
    int ch,cw;
    cw=cmp(l,r,w);
    ch=cmp(t,b,h);
    static bool g[6000][6000];
    fill(g[0],g[6000],false);
    for(int i=0;i<n;i++){
      for(int j=t[i];j<b[i];j++){
	for(int k=l[i];k<r[i];k++){
	  g[j][k]=true;
	}
      }
    }
    int c=0;
    for(int i=0;i<ch;i++){
      for(int j=0;j<cw;j++){
	if(!g[i][j]){
	  c++;
	  typedef pair<int,int> pii;
	  queue<pii> que;
	  que.push(pii(i,j));
	  while(!que.empty()){
	    int y=que.front().first;
	    int x=que.front().second;
	    que.pop();
	    if(x<0||cw<=x||y<0||ch<=y||g[y][x])continue;
	    g[y][x]=true;
	    for(int i=0;i<4;i++){
	      int d[]={0,1,0,-1,0};
	      que.push(pii(y+d[i],x+d[i+1]));
	    }
	  }
	}
      }
    }
    cout<<c<<endl;
  }
  return 0;
}