#include<iostream>
#include<fstream>
#include<sstream>
#include<vector>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
#include<iomanip>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<list>
#include<utility>
#include<climits>

#define INF INT_MAX/2
#define EPS 1.0e-7

#define MAX_NUM 1000

using namespace std;

typedef long long ll;
typedef pair<int,int> PII;

int W,H;
int N;

int vx[MAX_NUM*2];
int vy[MAX_NUM*2];

char flag[6*MAX_NUM+1][6*MAX_NUM+1];

int compress(int *v, int n, int l){

    vector<int> cv;
    for(int i=0;i<n;++i)
        for(int d=-1;d<=1;++d)
            if(0<=v[i]+d && v[i]+d<=l-1)
                cv.push_back(v[i]+d);

    sort(cv.begin(),cv.end());
    int ret = unique(cv.begin(),cv.end())-cv.begin();

    for(int i=0;i<n;++i)
        v[i] = lower_bound(cv.begin(),cv.begin()+ret,v[i])-cv.begin();

    return ret;

}

int main(){

    cin.sync_with_stdio(false);

    while(cin>>W>>H, W){

        cin >> N;

        for(int i=0;i<N;++i) cin >> vx[2*i] >> vy[2*i] >> vx[2*i+1] >> vy[2*i+1];

        int w = compress(vx,2*N,W);
        int h = compress(vy,2*N,H);

        memset(flag,0,sizeof(flag));

        for(int i=0;i<N;++i)
            for(int ix=vx[2*i];ix<vx[2*i+1];++ix)
                for(int iy=vy[2*i];iy<vy[2*i+1];++iy){
                    flag[ix][iy]=1;
                }

        int ans = 0;

        for(int i=0;i<w;++i){

            for(int j=0;j<h;++j){

                if(flag[i][j])continue;

                ++ans;

                queue<PII> q;
                q.push(make_pair(i,j));
                flag[i][j]=1;
               
                while(!q.empty()){

                    PII p = q.front(); q.pop();
                    int x = p.first;
                    int y = p.second;
                    
                    const int d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
                   
                    for(int k=0;k<4;++k){

                        int nx = x+d[k][0];
                        int ny = y+d[k][1];

                        if(!(0<=nx && nx<w && 0<=ny && ny<h) || flag[nx][ny])continue;
                        flag[nx][ny]=1;
                        q.push(make_pair(nx,ny));

                    }

                }

            }

        }

        cout << ans << endl;

    }

    return 0;

}