#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=300005;
inline int read()
{
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int n,m,q,u,v,tot,rt[N<<4],cnt,lson[N<<4],rson[N<<4],sum[N<<4],pos;
std::vector<int> pb[N];
inline int query(int now,int l,int r,int val)
{
if(l==r)return l;
int mid=((l+r)>>1),tmp=mid-l+1-sum[lson[now]];
if(val<=tmp)return query(lson[now],l,mid,val);
return query(rson[now],mid+1,r,val-tmp);
}
inline void modify(int &now,int l,int r)
{
if(!now)now=++cnt;
sum[now]++;
if(l==r)return;
int mid=((l+r)>>1);
if(pos<=mid)modify(lson[now],l,mid);
else modify(rson[now],mid+1,r);
}
inline int sp_sol(int x,int y)
{
pos=query(rt[n+1],1,tot,x);
modify(rt[n+1],1,tot);
int ans;
if(pos<=n)ans=pos*m;
else ans=pb[n+1][pos-n-1];
if(y)pb[n+1].push_back(y);
else pb[n+1].push_back(ans);
return ans;
}
inline int sol(int x,int y)
{
pos=query(rt[x],1,tot,y);
modify(rt[x],1,tot);
int ans;
if(pos<m)ans=(x-1)*m+pos;
else ans=pb[x][pos-m];
pb[x].push_back(sp_sol(x,ans));
return ans;
}
signed main(signed argc, char const *argv[])
{
// freopen("phalanx.in","r",stdin);
// freopen("phalanx.out","w",stdout);
n=read();m=read();q=read();
tot=max(n,m)+q;
while(q--)
{
u=read();v=read();
if(v==m)cout<<sp_sol(u,0)<<endl;
else cout<<sol(u,v)<<endl;
}
return 0;
}