#include <cstdio>
#include <algorithm>
using namespace std;
long c,i,j,n,m,l1,c1,l2,c2,v[3][100100],aux,a,b,nr1,nr2,x[3][100100],poz,lc,rez;
long caut_bin1(long nr, long l, long r)
{
if (nr<v[1][1])
return 1;
long m=(l+r)/2;
if (v[1][m]>nr&&v[1][m-1]<nr)
return m;
if (v[1][m]<nr)
return caut_bin1(nr,m+1,r);
else
return caut_bin1(nr,l,m-1);
}
long caut_bin2(long nr, long l, long r)
{
if (nr<v[2][1])
return 1;
long m=(l+r)/2;
if (v[2][m]>nr&&v[2][m-1]<nr)
return m;
if (v[2][m]<nr)
return caut_bin2(nr,m+1,r);
else
return caut_bin2(nr,l,m-1);
}
int main(){
freopen("gropi.in","r",stdin);
freopen("gropi.out","w",stdout);
scanf("%d%d",&c,&n);
for (i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
if (a==1)
{
v[1][0]++;
v[1][v[1][0]]=b;
}
else
{
v[2][0]++;
v[2][v[2][0]]=b;
}
/* v[a][0]++;
v[a][v[a][0]]=b; */
}
sort(v[1]+1,v[1]+v[1][0]+1);
sort(v[2]+1,v[2]+v[2][0]+1);
v[1][v[1][0]+1]=2000000000;
v[2][v[2][0]+1]=2000000000;
//precalcularea pentru v[1]
nr2=1;
for (i=1;i<=v[1][0];i++)
{
while ((v[2][nr2]<v[1][i])&&(nr2<=v[2][0]))
nr2++;
x[1][i]=nr2;
}
//precalcularea pentru v[2]
nr1=1;
for (i=1;i<=v[2][0];i++)
{
while ((v[1][nr1]<v[2][i])&&(nr1<=v[1][0]))
nr1++;
x[2][i]=nr1;
}
scanf("%d",&m);
for (i=1;i<=m;i++)
{
scanf("%d%d%d%d",&l1,&c1,&l2,&c2);
if (c2<c1)
{
aux=l1;l1=l2;l2=aux;
aux=c1;c1=c2;c2=aux;
}
rez=(c2-c1)+1;
if (l1==1)
{
poz=caut_bin1(c1,1,v[1][0]);
lc=1;
do
{
rez++;
poz=x[lc][poz];
lc=3-lc;
}
while (v[lc][poz]<c2);
if (lc!=l2)
rez++;
}
else
{
poz=caut_bin2(c1,1,v[2][0]);
lc=2;
do
{
rez++;
poz=x[lc][poz];
lc=3-lc;
}
while (v[lc][poz]<c2);
if (lc!=l2)
rez++;
}
printf("%d\n",rez);
}
return 0;
}