#include<stdio.h>
long c,n,m,n1,n2,dist;
int x1,x2;
long y1,y2;
long v1[100003],v2[100003];
long bin1()
{
long st=1,dr=n1;
long m;
while(st<=dr)
{
m=(st+dr)>>1;
if(v1[m]>y1)
dr=m-1;
else
st=m+1;
}
while(v1[m]>y1)
m--;
return v1[m+1];
}
long bin2()
{
long st=1,dr=n2;
long m;
m=(st+dr)>>1;
while(st<=dr)
{
m=(st+dr)>>1;
if(v2[m]>y1)
dr=m-1;
else
st=m+1;
}
while(v2[m]>y1)
m--;
return v2[m+1];
}
void parcurgere()
{
int i,j;
while(y1<y2)
{
if(x1==1)
{
y1=bin1()-1;
if(y1<y2)
{
x1++;
dist++;
}
}
else
{
y1=bin2()-1;
if(y1<y2)
{
x1--;
dist++;
}
}
}
if(x1!=x2)
dist++;
}
long part1(long st, long dr)
{
long m,pivot,i,j,aux;
m=(st+dr)>>1;
pivot=v1[m];
i=st-1;
j=dr+1;
while(1)
{
do{++i;}while(v1[i]<pivot);
do{--j;}while(v1[j]>pivot);
if(i<j)
{
aux=v1[i];
v1[i]=v1[j];
v1[j]=aux;
}
else
return j;
}
}
void quick1(long st, long dr)
{
long p;
if(st<dr)
{
p=part1(st,dr);
quick1(st,p);
quick1(p+1,dr);
}
}
long part2(long st, long dr)
{
long m,pivot,i,j,aux;
m=(st+dr)>>1;
pivot=v2[m];
i=st-1;
j=dr+1;
while(1)
{
do{++i;}while(v2[i]<pivot);
do{--j;}while(v2[j]>pivot);
if(i<j)
{
aux=v2[i];
v2[i]=v2[j];
v2[j]=aux;
}
else
return j;
}
}
void quick2(long st, long dr)
{
long p;
if(st<dr)
{
p=part2(st,dr);
quick2(st,p);
quick2(p+1,dr);
}
}
void read()
{
freopen("gropi.in","r",stdin);
freopen("gropi.out","w",stdout);
scanf("%ld%ld",&c,&n);
long i;
for(i=1;i<=n;i++)
{
scanf("%d%ld",&x1,&y1);
if(x1==1)
v1[++n1]=y1;
else
v2[++n2]=y1;
}
quick1(1,n1);
quick2(1,n2);
v1[++n1]=c+1;
v2[++n2]=c+1;
scanf("%ld",&m);
int x;
long y;
for(i=1;i<=m;i++)
{
dist=0;
scanf("%d%ld%d%ld",&x1,&y1,&x2,&y2);
if(y2<y1)
{
y=y1;
y1=y2;
y2=y;
x=x1;
x1=x2;
x2=x;
}
dist=y2-y1+1;
parcurgere();
printf("%ld\n",dist);
}
}
int main()
{
read();
return 0;
}