//#define LOCAL

#include <fstream>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <cstring>

#define rep(i,n) for(int i=0; i<n; i++)

using namespace std;

int w, h;
int n;
int X1[1010], Y1[1010], X2[1010], Y2[1010];
bool fld[6000][6000];

void printv(vector<int> vi)
{
    rep(i,vi.size()) {
        cout << vi[i] << " ";
    }
    cout << endl;
}

int compress(int *x1, int *x2, int tw)
{
    vector<int> xs;

    for (int i=0; i<n; i++) {
        for (int d=-1; d<=1; d++) {
            int tx1 = x1[i] + d, tx2 = x2[i] + d;
            if (0 <= tx1 && tx1 < tw) xs.push_back(tx1);
            if (0 <= tx2 && tx2 < tw) xs.push_back(tx2);
        }
    }

    sort(xs.begin(), xs.end());
    xs.erase(unique(xs.begin(), xs.end()), xs.end());

    //printv(xs);

    for (int i=0; i<n; i++) {
        x1[i] = lower_bound(xs.begin(), xs.end(), x1[i]) - xs.begin();
        x2[i] = lower_bound(xs.begin(), xs.end(), x2[i]) - xs.begin();
    }

    return xs.size();
}

int dx[4] = {-1, 0, 0, 1};
int dy[4] = {0, -1, 1, 0};

int main()
{
#ifdef LOCAL
    ifstream in("input.txt");
    cin.rdbuf(in.rdbuf());
#endif

while (true) {
    cin >> w >> h;
    if (w == 0 && h == 0) break;
    cin >> n;

    rep(i,n) {
        int x1, y1, x2, y2;
        cin >> X1[i] >> Y1[i] >> X2[i] >> Y2[i];
    }

    w = compress(X1, X2, w);
    h = compress(Y1, Y2, h);

    memset(fld, 0, sizeof(fld));
    rep(i,n) {
        for (int y=Y1[i]; y<Y2[i]; y++) {
            for (int x=X1[i]; x<X2[i]; x++) {
                fld[y][x] = true;
            }
        }
    }

    /*
    rep(i,h) {
        rep(j,w) {
            if (fld[i][j]) cout << "#";
            else cout << ".";
        }
        cout << endl;
    }
    */

    int ans = 0;
    rep(y,h) {
        rep(x,w) {
            if (fld[y][x]) continue;
            ans++;

            queue<pair<int, int> > que;
            que.push(make_pair(x, y));
            while (!que.empty()) {
                int sx = que.front().first, sy = que.front().second;
                que.pop();

                rep(i,4) {
                    int tx = sx + dx[i], ty = sy + dy[i];
                    if (tx < 0 || w <= tx || ty < 0 || h <= ty) continue;
                    if (fld[ty][tx]) continue;
                    que.push(make_pair(tx, ty));
                    fld[ty][tx] = true;
                }
            }
        }
    }

    cout << ans << endl;
}
}