#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
#include <algorithm>

using namespace std;

const int MAX_N = 1e3 + 1;
const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1};
int w, h, n;
int X1[MAX_N], X2[MAX_N], Y1[MAX_N], Y2[MAX_N];

// 塗る領域
bool fld[MAX_N * 6][MAX_N * 6];

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

    for (int i = 0; i < n; i++) {
        for (int d = -1; d <= 1; d++) {
            int tx1 = x1[i] + d;
            int 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();
}

void solve()
{
    // 座標圧縮
    w = compress(X1, X2, w);
    h = compress(Y1, Y2, h);

    // マスキングテープの領域を塗りつぶす
    memset(fld, 0, sizeof(fld));
    for (int i = 0; i < n; i++) 
        for (int y = Y1[i]; y <= Y2[i]; y++)
            for (int x = X1[i]; x <= X2[i]; x++)
                fld[y][x] = true;

    int ans = 0;
    for (int y = 0; y < h; y++) {
        for (int x = 0; x < w; x++) {
            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;
                int sy = que.front().second;
                que.pop();
                
                for (int i = 0; i < 4; i++) {
                    int tx = sx + dx[i];
                    int ty = sy + dy[i];

                    if (tx < 0 || tx >= w || ty < 0 || ty >= h)
                        continue;
                    if (fld[ty][tx])
                        continue;

                    que.push(make_pair(tx, ty));
                    fld[ty][tx] = true;
                }
            }
        }
    }
    cout << ans << endl;
}

int main()
{
    while (cin >> w >> h, w || h) {
        cin >> n;
        w *= 2;
        h *= 2;
        for (int i = 0; i < n; i++) {
            cin >> X1[i] >> Y1[i] >> X2[i] >> Y2[i];
            X1[i] *= 2;
            Y1[i] *= 2;
            X2[i] *= 2;
            Y2[i] *= 2;
        }

        solve();
    }

    return 0;
}