#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define pf push_front
#define popb pop_back
#define popf pop_front
#define xx first
#define yy second
#define srt(a) sort(a.begin(),a.end());
#define srtg(a,int) sort(a.begin(),a.end(),greater<int>())
#define lb(a,x) lower_bound(a.begin(),a.end(),x)
#define up(a,x) upper_bound(a.begin(),a.end(),x)
#define fnd(a,x) find(a.begin(),a.end(),x)
#define vstart auto startt=chrono::system_clock::now()
#define vend auto endd=chrono::system_clock::now()
#define vvreme chrono::duration<double> vremee=endd-startt
#define ios ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define sta(i,j) (i)*m+(j)

using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef string str;
int dje(int x,vector<int> &dsu){
    if(x==dsu[x]) return x;
    int sta=dje(dsu[x],dsu);
    dsu[x]=sta;
    return sta;
}
int spoji(int x,int y,vector<int> &dsu){
    dsu[dje(x,dsu)]=dje(y,dsu);
}
int main()
{
    ios;
    int n,m,k;
    cin>>n>>m>>k;
    vector<bool> pom(m,false);
    vector<vector<bool> > mat(n,pom);
    vector<pii> ulaz(k);
    for(int i=0;i<k;i++){
        int a,b;
        cin>>a>>b;
        mat[a-1][b-1]=true;
    }
    vector<int> dsu(m*n,0);
    for(int i=0;i<n*m;i++){
        dsu[i]=i;
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(mat[i][j]) continue;
            if(i<n-1) if(!mat[i+1][j]) spoji(sta(i+1,j),sta(i,j),dsu);
            if(i>0) if(!mat[i-1][j]) spoji(sta(i-1,j),sta(i,j),dsu);
            if(j<m-1) if(!mat[i][j+1]) spoji(sta(i,j+1),sta(i,j),dsu);
            if(j>0) if(!mat[i][j-1]) spoji(sta(i,j-1),sta(i,j),dsu);
        }
    }
    map<int,int> nesto;
    for(int i=0;i<m*n;i++){
      //  cout<<i<<" "<<dje(i,dsu)<<"\n";
        if(!mat[i/m][i%m])
        nesto[dje(i,dsu)]++;
    }
    cout<<nesto.size();
    return 0;
}