#include <cstdio>
#include <algorithm>

const int N = 2e5 + 5;
typedef long long LL;

int n, m, cntob;
int mxr[N], mxc[N];

int qry[N];

namespace BIT { // 树状数组
	int t[N];
	void add(int x) { while(x <= n) t[x]++, x += (x & -x); }
	int query(int x) { int ret = 0; while(x > 0) ret += t[x], x -= (x & -x); return ret; }
}

int main() {
	std::scanf("%d%d%d", &n, &m, &cntob);
	for(int i = 1; i <= n; i++) mxr[i] = m; // 第 i 行第一步可以到达最右的地方
	for(int i = 1; i <= m; i++) mxc[i] = n; // 第 i 列第一步可以到达最下的地方
	for(int i = 1; i <= cntob; i++) {
		int x, y;
		std::scanf("%d%d", &x, &y);
		mxr[x] = std::min(mxr[x], y - 1);
		mxc[y] = std::min(mxc[y], x - 1);
	}
	for(int i = mxr[1] + 1; i <= m; i++) mxc[i] = 0;
	for(int i = mxc[1] + 1; i <= n; i++) mxr[i] = 0;
	LL ans = 0;
	for(int i = 1; i <= m; i++) ans += mxc[i];
	int cntqry = mxc[1];
	for(int i = 1; i <= cntqry; i++) qry[i] = i;
	std::sort(qry + 1, qry + cntqry + 1, [](int x, int y) { return mxr[x] < mxr[y]; });
	int now = 1;
	for(int i = 1; i <= m; i++) {
		BIT::add(mxc[i] + 1);
		for(; mxr[qry[now]] <= i && now <= cntqry; now++)
			ans += BIT::query(qry[now]);
	}
	std::printf("%lld\n", ans);
	return 0;
} /* self
about TLE (with 14 ACs, 1 WA and 14 TLEs):
	BIT's indexes should add 1 each, because of zeros.
	(0 can't be the index of BIT)
about WA (with 21 ACs and 8 WAs):
	there shouldn't be n (H in the problem) querys
	(line 32 shouldn't be n but mxc[1])
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define For(i,n,k) for(int i=(n);i<(k);i++)
#define ALL(a) (a).begin(),(a).end()
const int INIT = 0;//適当に変える max:0 min:2e9 gcd:0 sum:0
struct segmentTree{
private:
    int n;
    vector<int> node;

public:
    segmentTree(vector<int> vec){
        int sz = vec.size();
        n = 1;
        while(n<sz)n *= 2;
        node.resize(2 * n - 1,INIT);

        For(i,0,sz){
            node[i + (n - 1)] = vec[i];
        }
        for(int i=n-2;i>-1;i--){
            node[i] = node[2 * i + 1] + node[2 * i + 2];//演算子は適当に
        }
    }
    void update(int x,int val){
        x += (n - 1);
        node[x] = val;
        while(x){
            x = (x - 1) / 2;
            node[x] = node[2 * x + 1] + node[2 * x + 2];//演算子は適当に
        }
    }
    //区間[a,b) k:今見ているノード 

    int get(int a, int b, int k=0, int l=0, int r=-1) {
        // 最初に呼び出されたときの対象区間は [0, n)
        if(r < 0) r = n;

        // 要求区間と対象区間が交わらない
        if(r <= a || b <= l) return INIT;

        // 要求区間が対象区間を完全に被覆
        if(a <= l && r <= b) return node[k];

        // 要求区間が対象区間の一部を被覆 -> 子について探索を行う
        // 左側の子を vl ・ 右側の子を vr としている
        // 新しい対象区間は、現在の対象区間を半分に割ったもの
        int vl = get(a, b, 2 * k + 1, l, (l + r) / 2);
        int vr = get(a, b, 2 * k + 2, (l + r) / 2, r);
        int val = vl + vr;//演算子は適当に
        return val;
    }
    
};
ll ans = 0;
void Main(){
    using P = pair<int, int>;
    int h, w, m;
    cin >> h >> w >> m;
    vector<int> x(m), y(m);
    For(i,0,m) cin >> x[i] >> y[i];
    vector<P> wall;
    For(i,0,m){
        wall.push_back({x[i], y[i]});
    }
    For(i,1,h+1){
        wall.push_back({i, w+1});
    }
    sort(ALL(wall));
    vector<int> vec(w + 2, 0);
    segmentTree segTree(vec);
    P last = {0, 0};
    int xmax = h + 1;
    int ymax = wall[0].second;
    for(auto p : wall){
        if(p.second == 1) xmax = min(xmax, p.first);
    }

    for(auto p : wall){
        // cout << p.first << " " << p.second << " ";
        if(last.first != p.first){
            // 下右で来る場合の処理
            if(p.first < xmax) ans += p.second - 1;
            else{
                int r = min(ymax, p.second);
                ans += r - 1 - segTree.get(0, r);
                // cout << segTree.get(0, r) << " ";
            }
        }
        else{
            // 右下で来る場合の処理
            int r = min(ymax, p.second);
            if(last.second < r && p.first > 1)ans += r - last.second - 1 - segTree.get(last.second + 1, r);
        }
        
        segTree.update(p.second, 1);
        last = p;
        // cout << ans << endl;
    }
    cout << ans << endl;
}
int main(){
    Main();
    /*
    東方風神録は神が出てくるので当然神ゲー
    */
    return 0;
}