# include <stdio.h>
# define FIN "gropi.in"
# define FOUT "gropi.out"
# define MAXN 100002
int N,k,i,x,y,T;
int C[MAXN];
int L[MAXN];
int poz[MAXN];
void swap(int &a, int &b)
{
int aux;
aux = a;
a = b;
b = aux;
}
void down(int i, int N)
{
int tata,fiu;
tata = i;
fiu = i << 1;
while (fiu <= N)
{
if (fiu < N && C[fiu]<C[fiu+1]) fiu++;
if (C[tata]<C[fiu])
{
swap(C[tata],C[fiu]);
swap(L[tata],L[fiu]);
tata = fiu;
fiu = fiu << 1;
}
else fiu = N+1;
}
}
void heap(int N)
{
int i;
for (i = N/2; i >= 1; --i)
down(i,N);
for (i = N; i > 1; --i)
{
swap(C[1],C[i]);
swap(L[1],L[i]);
down(1,i-1);
}
}
int search(int val)
{
int st,dr,mij,rez;
st = 0;
dr = N+1;
while (st <= dr)
{
mij = (st + dr) >> 1;
if (C[mij] <= val)
{
rez = mij;
st = mij + 1;
}
else dr = mij - 1;
}
return rez;
}
int verif(int x,int y,int ok)
{
if (poz[x] == poz[x+1])
if (L[x] == y)
if (ok == 1) return poz[x]-1;
else return poz[x]+1;
else return poz[x];
if (poz[x] != poz[x+1])
if (L[x] == y) return poz[x+1];
else return poz[x];
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d%d",&k,&N);
for (i = 1; i <= N; ++i)
scanf("%d%d",&L[i],&C[i]);
heap(N);
int ct = 0;
if (L[1] == 1) L[0] = 2;
else L[0] = 1;
if (L[N] == 1) L[N+1]= 2;
else L[N+1] = 1;
C[N+1]=k+1;
for (i = 1; i <= N+1; ++i)
if (L[i-1] != L[i]) poz[i] = ++ct;
else poz[i] = ct;
scanf("%d",&T);
int xi,yi,xf,yf,rez,t1,t2;
for (i = 1; i <= T; ++i)
{
scanf("%d%d",&xi,&yi);
scanf("%d%d",&xf,&yf);
if (yf < yi)
{
swap(xi,xf);
swap(yi,yf);
}
x = search(yi);
y = search(yf);
rez = 0;
t1 = verif(x,xi,1);
t2 = verif(y,xf,2);
rez = yf-yi+t2-t1+1;
printf("%d\n",rez);
}
return 0;
}