#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <climits>
#include <ctime>
#ifdef ONLINE_JUDGE
char __B[1<<15],*__S=__B,*__T=__B;
#define getchar() (__S==__T&&(__T=(__S=__B)+fread(__B,1,1<<15,stdin),__S==__T)?EOF:*__S++)
#endif
inline int getnum()
{
register char c=0;
while(!(c>='0' && c<='9'))
c=getchar();
register int a=0;
while(c>='0' && c<='9')
{
a*=10;a+=c-'0';
c=getchar();
}
return a;
}
int g1head[105050],g1next[205050],g1node[205050],g1cnt;
int g2head[105050],g2next[205050],g2node[205050],g2cnt;
#define g1insertLine(_s,_t) \
g1node[++g1cnt]=_t,g1next[g1cnt]=g1head[_s],g1head[_s]=g1cnt;
#define g2insertLine(_s,_t) \
g2node[++g2cnt]=_t,g2next[g2cnt]=g2head[_s],g2head[_s]=g2cnt;
int N;
int a[105050],b[105050],x[105050];
int ansnode[105050],ans[105050];
unsigned _seed,_ret;
#define rnd() (_ret=_seed,_seed=_seed*7+23,_ret)
int root,cnt,size[105050],lson[105050],rson[105050],val[105050],pri[105050],father[105050];
bool rev[105050];
inline int CreateNode(register int v)
{
size[++cnt]=1;
val[cnt]=v;
pri[cnt]=rnd();
return cnt;
}
inline void PushUp(register int x)
{
size[x]=size[lson[x]]+size[rson[x]]+1;
father[lson[x]]=father[rson[x]]=x;
(x==root ? father[x]=0 : 0);
}
inline void PushDown(register int x)
{
rev[x]^=1;
lson[x]^=rson[x]^=lson[x]^=rson[x];
rev[lson[x]]^=1,rev[rson[x]]^=1;
}
inline int MergeTree(register int x,register int y)
{
if(!x || !y)
return x^y;
if(rev[x])
PushDown(x);
if(rev[y])
PushDown(y);
if(pri[x] < pri[y])
{
rson[x]=MergeTree(rson[x],y);
return PushUp(x),x;
}
else
{
lson[y]=MergeTree(x,lson[y]);
return PushUp(y),y;
}
}
inline void SplitTreeByOrder(register int o,register int k,int&x,int&y)
{
if(!o)
{
x=y=0;
return;
}
if(rev[o])
PushDown(o);
if(k <= size[lson[o]])
y=o,SplitTreeByOrder(lson[o],k,x,lson[o]);
else
x=o,SplitTreeByOrder(rson[o],k-size[lson[o]]-1,rson[o],y);
PushUp(o);
}
inline void SegmentReverse(register int l,register int r)
{
int a=0,b=0,c=0,d=0;
SplitTreeByOrder(root,r,a,b);
SplitTreeByOrder(a,l-1,c,d);
rev[d]^=1;
root=MergeTree(MergeTree(c,d),b);
}
inline int OrderOfKey(register int v)
{
static int stk[105050];
register int top=0;
for(register int x=v;father[x];x=father[x])
stk[++top]=x;
if(rev[root])
PushDown(root);
for(register int i=top;i>=1;i--)
if(rev[stk[i]])
PushDown(stk[i]);
register int s=size[lson[v]]+1;
for(register int x=v;father[x];x=father[x])
if(x == rson[father[x]])
s+=size[lson[father[x]]]+1;
return s;
}
inline int ValueOfOrder(register int x,register int k)
{
if(!x)
return -1;
if(rev[x])
PushDown(x);
if(k == size[lson[x]]+1)
return val[x];
if(k <= size[lson[x]])
return ValueOfOrder(lson[x],k);
else
return ValueOfOrder(rson[x],k-size[lson[x]]-1);
}
inline int BuildTree(register int l,register int r)
{
static int stk[105050];
register int top=0;
for(register int i=l;i<=r;i++)
{
register int x=CreateNode(i),last=0;
while(top && pri[stk[top]] > pri[x])
PushUp(stk[top]),last=stk[top],stk[top--]=0;
if(top)
rson[stk[top]]=x;
lson[x]=last,stk[++top]=x;
}
while(top)
PushUp(stk[top--]);
return stk[1];
}
int main()
{
srand(time(NULL));_seed=(unsigned)rand()*rand();
register int N=getnum(),M=getnum(),Q=getnum();
::N=N;
for(register int i=1;i<=M;i++)
a[i]=getnum(),b[i]=getnum();
for(register int i=1;i<=Q;i++)
{
x[i]=getnum();
register int l=getnum(),r=getnum();
g1insertLine(l,i);g2insertLine(r,i);
}
root=BuildTree(1,N);
//printf("%d\n",0);
//printf("%d %d %d %d %d\n",ValueOfOrder(root,1),ValueOfOrder(root,2),ValueOfOrder(root,3),ValueOfOrder(root,4),ValueOfOrder(root,5));
//printf("pos: %d %d %d %d %d\n",OrderOfKey(1),OrderOfKey(2),OrderOfKey(3),OrderOfKey(4),OrderOfKey(5));
for(register int i=1;i<=M;i++)
{
for(register int j=g1head[i];j;j=g1next[j])
ansnode[j]=ValueOfOrder(root,x[g1node[j]]);
SegmentReverse(a[i],b[i]);
//printf("%d\n",i);
//printf("%d %d %d %d %d\n",ValueOfOrder(root,1),ValueOfOrder(root,2),ValueOfOrder(root,3),ValueOfOrder(root,4),ValueOfOrder(root,5));
//printf("pos: %d %d %d %d %d\n",OrderOfKey(1),OrderOfKey(2),OrderOfKey(3),OrderOfKey(4),OrderOfKey(5));
for(register int j=g2head[i];j;j=g2next[j])
ans[g2node[j]]=OrderOfKey(ansnode[g2node[j]]);
}
for(register int i=1;i<=Q;i++)
printf("%d\n",ans[i]);
return 0;
}