#include <bits/stdc++.h>
#define err(args...) {}
#ifdef DEBUG
#include "_debug.cpp"
#endif
using namespace std;
using ll = long long;
using ld = long double;
template <typename T> using lim = numeric_limits<T>;
template <typename T> istream& operator>>(istream& is, vector<T>& a) { for(T& x : a) { is >> x; } return is; }
const int N = 2 * 1000 + 2;
int ix, iy, rects[N+1][N+1], vis[N+1][N+1];
void increment(int x1, int y1, int x2, int y2) {
    rects[x1][y1]++;
    rects[x1][y2]--;
    rects[x2][y1]--;
    rects[x2][y2]++;
}
void psum(int w, int h) {
    for(int x = 0; x < w; x++) {
        for(int y = 0; y < h; y++) {
            rects[x][y] += x ? rects[x-1][y] : 0;
            rects[x][y] += y ? rects[x][y-1] : 0;
            rects[x][y] -= x and y ? rects[x-1][y-1] : 0;
        }
    }
}
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
void dfs(int w, int h, int x, int y) {
    vis[x][y] = true;
    for(int d = 0; d < 4; d++) {
        int nx = x + dx[d], ny = y + dy[d];
        if(0 <= nx and nx < w and 0 <= ny and ny < h and not vis[nx][ny] and not rects[nx][ny]) {
            dfs(w, h, nx, ny);
        }
    }
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int w, h;
    while(cin >> w >> h and w and h) {
        int n;
        cin >> n;
        vector<int> x1(n), y1(n), x2(n), y2(n);
        set<int> xs = {0, w}, ys = {0, h};
        for(int i = 0; i < n; i++) {
            cin >> x1[i] >> y1[i] >> x2[i] >> y2[i];
            xs.insert({x1[i], x2[i]});
            ys.insert({y1[i], y2[i]});
        }
        map<int, int> idx, idy;
        ix = 0, iy = 0;
        for(int x : xs) {
            idx[x] = ix++;
        }
        for(int y : ys) {
            idy[y] = iy++;
        }
        for(int x = 0; x < idx[w]; x++) {
            for(int y = 0; y < idy[h]; y++) {
                rects[x][y] = vis[x][y] = 0;
            }
        }
        for(int i = 0; i < n; i++) {
            increment(idx[x1[i]], idy[y1[i]], idx[x2[i]], idy[y2[i]]);
        }
        psum(idx[w], idy[h]);
        int ans = 0;
        for(int x = 0; x < idx[w]; x++) {
            for(int y = 0; y < idy[h]; y++) {
                if(not vis[x][y] and not rects[x][y]) {
                    dfs(idx[w], idy[h], x, y);
                    ans++;
                }
            }
        }
        cout << ans << endl;
    }
    return 0;
}
