#include<cstdio>
#include<algorithm>
#define N 1214514
using namespace std;
int seed,p=19260817;
void _srand(int x){seed=x;}
int _rand(){seed=((((seed*7+114)*13%p)+514)*131)%p;return seed;}
int rt[N],tot,dep[N];
int n,m,q;
struct node{
int rk,l,r;
node operator-(int a){return (node){rk-1,l,r};}
bool operator<(const node &a)const{return rk<a.rk;}
bool operator<=(const node &a)const{return rk<=a.rk;}
}val[N];
int ch[N][2],f[N],siz[N],s[N],rnd[N];
#define lc ch[x][0]
#define rc ch[x][1]
int newnode(node x){val[++tot]=x,siz[tot]=x.r-x.l+1,rnd[tot]=_rand();return tot;}
int update(int x){
s[x]=s[lc]+s[rc]+val[x].r-val[x].l+1;
siz[x]=siz[lc]+siz[rc]+1;
return x;
}
void split(int p,node k,int &x,int &y){
if(!p)return void(x=y=0);
if(val[p]<=k)split(ch[x=p][1],k,ch[p][1],y);
else split(ch[y=p][0],k,x,ch[p][0]);
update(p);
}
int merge(int x,int y){
if(!x||!y)return x+y;
if(rnd[x]<rnd[y]){rc=merge(rc,y);return update(x);}
else{ch[y][0]=merge(x,ch[y][0]);return update(y);}
}
void insert(int &rt,node v){
int x,y;
split(rt,v-1,x,y);
rt=merge(merge(x,newnode(v)),y);
}
int rnk(int x,int k){
while(1){
if(siz[lc]+1==k)return x;
if(k<=siz[lc])x=lc;
else k-=siz[lc]+1,x=rc;
}
}
int rkk(int x,int k){
while(1){
if(s[x]>=k&&k>=s[lc])return x;
if(k<=s[lc])x=lc;
else k-=s[x],x=rc;
}
}
node kth(int x,int k){return val[rnk(x,k)];}
node kthk(int x,int k){return val[rkk(x,k)];}
int delrk(int &rt,int k){
int x,y,z;
node v=kthk(rt,k);
split(rt,v-1,y,z);
split(rt,v,x,z);
x=merge(lc,rc);
rt=merge(merge(y,x),z);
insert(rt,(node){v.rk,v.l,v.l+k-2});
insert(rt,(node){v.rk+1,v.l+k,v.r});
return v.l+k-1;
}
signed main(){
scanf("%d%d%d",&n,&m,&q);
rt[0]=newnode((node){1,m,m});
dep[0]=1;
for(int i=1;i<=n;i++)rt[i]=newnode((node){1,(i-1)*m+1,i*m});
for(int i=1;i<=n;i++)insert(rt[0],(node){++dep[0],i*m,i*m});
while(q--){
int x,y;
scanf("%d%d",&x,&y);
int res=delrk(rt[x],y);
printf("%d\n",res);
delrk(rt[0],x);
insert(rt[0],(node){++dep[0],res,res});
}
return 0;
}