#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
//谢谢博友文章和程序 模拟 排序
struct da{
int x;
int y;
};
bool op1(da a,da b)
{
if(a.x==b.x)
{
return a.y<b.y;
}else
{
return a.x<b.x;
}
}
bool op2(da a,da b)
{
if(a.y==b.y)
{
return a.x<b.x;
}else
{
return a.y<b.y;
}
}
int main()
{
int T;
cin>>T;
for(int ii=0;ii<T;ii++)
{
int jg=0;
int n,m,k;
//cin>>n>>m>>k;
scanf("%d%d%d",&n,&m,&k);
//cout<<n<<" "<<m<<" "<<k<<endl;
vector<da> ve;
ve.clear();
for(int i=0;i<k;i++)
{
da t;
//cin>>t.x>>t.y;
scanf("%d%d",&t.x,&t.y);
//cout<<t.x<<" "<<t.y<<endl;
ve.push_back(t);
}
for(int i=1;i<=n;i++)
{
da t;
t.x=i;
t.y=m+1;
ve.push_back(t);
}
for(int i=1;i<=m;i++)
{
da t;
t.x=n+1;
t.y=i;
ve.push_back(t);
}
/*
cout<<"************"<<endl;
for(int i=0;i<ve.size();i++)
{
cout<<ve[i].x<<" "<<ve[i].y<<endl;
}
cout<<"*************"<<endl;*/
sort(ve.begin(),ve.end(),op1);
da tt;
tt.x=-100;
tt.y=-100;
for(int i=0;i<ve.size();i++)
{
if(((tt.x==ve[i].x)&&(ve[i].y-tt.y)<=2)||(ve[i].y<=2))
{
}else
{
//cout<<ve[i].x<<" "<<ve[i].y<<endl;
jg++;
}
tt=ve[i];
}
//cout<<jg<<endl;
sort(ve.begin(),ve.end(),op2);
tt.x=-100;
tt.y=-100;
for(int i=0;i<ve.size();i++)
{
if(((tt.y==ve[i].y)&&(ve[i].x-tt.x)<=2)||(ve[i].x<=2))
{
}else
{
//cout<<ve[i].x<<" "<<ve[i].y<<endl;
jg++;
}
tt=ve[i];
}
cout<<jg<<endl;
}
return 0;
}