#include <fstream>
std::ifstream f1("gropi.in");
std::ofstream f2("gropi.out");
long part(long a[100100], long p, long q);
void quicksort(long sir[100100], long jos, long sus);
long bsearch(long sir[100100], long jos, long sus, long x);
int main()
{
long c, n, i, unu[100100], doi[100100], nrUnu, nrDoi, pozUnu, pozDoi, m, x1, x2, y1, y2, a, b, t;
unsigned long cont;
f1>>c>>n;
for (i=0; i<n; i++)
{
f1>>a>>b;
if (a==1)
unu[nrUnu++]=b;
else
doi[nrDoi++]=b;
}//for i
quicksort(unu, 0, nrUnu-1);
quicksort(doi, 0, nrDoi-1);
f1>>m;
for (i=0; i<m; i++)
{
f1>>x1>>x2>>y1>>y2;
if (x2>y2)
{
t=x1;
x1=y1;
y1=t;
t=x2;
x2=y2;
y2=t;
}//if
pozUnu=0;
pozDoi=0;
cont=1;
while ((x1!=y1)||(x2!=y2))
{
if (x1==1)
{
pozUnu=bsearch(unu, pozUnu, nrUnu-1, x2);
if (unu[pozUnu]<x2)
pozUnu++;
if ((unu[pozUnu]>y2)||(unu[nrUnu-1]<x2))
{
cont+=y2-x2;
x2=y2;
if (y1==2)
{
cont++;
x1=2;
}//if
}//if
else
{
cont+=unu[pozUnu]-1-x2;
x2=unu[pozUnu]-1;
cont++;
x1=2;
}//else
}//if
else
{
pozDoi=bsearch(doi, pozDoi, nrDoi-1, x2);
if (doi[pozDoi]<x2)
pozDoi++;
if ((doi[pozDoi]>y2)||(doi[nrDoi-1]<x2))
{
cont+=y2-x2;
x2=y2;
if (y1==1)
{
cont++;
x1=1;
}//if
}//if
else
{
cont+=doi[pozDoi]-1-x2;
x2=doi[pozDoi]-1;
cont++;
x1=1;
}//else
}//else
}//while
f2<<cont<<"\n";
}//for i
f1.close();
f2.close();
}//main
long part(long a[100100], long p, long q)
{
long x=a[p];
long t, j, i=p;
for (j=p+1; j<=q; j++)
if (a[j]<=x)
{
i++;
t=a[i];
a[i]=a[j];
a[j]=t;
}//if
t=a[p];
a[p]=a[i];
a[i]=t;
return i;
}//part
void quicksort(long sir[100100], long jos, long sus)
{
long p;
if (jos<sus)
{
p=part(sir, jos, sus);
quicksort(sir, jos, p-1);
quicksort(sir, p+1, sus);
}//if
}//quicksort
long bsearch(long sir[100100], long jos, long sus, long x)
{
long m=(jos+sus)/2;
while ((jos<sus)&&(sir[m]!=x))
{
if (x<sir[m])
sus=m-1;
else
jos=m+1;
m=(jos+sus)/2;
}//while
return m;
}//bsearch