#include<stdio.h>
long c,n,i,rr,r[3][110000],poz,l[3],t,x1,x2,y1,y2,s,tt,x;
long partit(long a[ ],long st, long dr)
{long i,j,m,piv,aa;
m=(st+dr)/2;
piv=a[m];
i=st-1;
j=dr+1;
while(1)
{do{++i;} while(a[i]<piv);
do{--j;} while(a[j]>piv);
if (i<j)
{aa=a[i];a[i]=a[j];a[j]=aa;}
else
return j;
}
}
void quicks(long a[ ],long st,long dr)
{long p;
if (st<dr)
{p=partit(a,st,dr);
quicks(a,st,p);
quicks(a,p+1,dr);
}
}
int main()
{
freopen("gropi.in","r",stdin);
freopen("gropi.out","w",stdout);
scanf("%ld%ld",&c,&n);
for(i=1;i<=n;++i)
{
scanf("%ld%ld",&rr,&poz);
if(rr==1) r[1][++l[1]]=poz;
else r[2][++l[2]]=poz;
}
quicks(r[1],1,l[1]);
quicks(r[2],1,l[2]);
r[1][l[1]+1]=2100000000;
r[2][l[2]+1]=2100000000;
scanf("%ld",&t);
for(tt=1;tt<=t;++tt)
{
scanf("%ld%ld%ld%ld",&x1,&y1,&x2,&y2);
s=1;
if(y1>y2){x=x1;x1=x2;x2=x;x=y1;y1=y2;y2=x;}
while(!(x1==x2&&y1==y2))
{
for(i=1;r[x1][i]<y1&&i<=l[x1];++i);
if(r[x1][i]>y2){s+=y2-y1;if(x1!=x2)++s;printf("%ld\n",s);break;}
else{s+=r[x1][i]-y1;y1=r[x1][i]-1;x1=(x1%2)+1;}
}
}
return 0;
}