#include <stdio.h>
#define MAXN 100000
#define INF 2000000001
int v[2][MAXN + 1], d[2];
int drum[2 * MAXN], dd, pr;
inline int notm(int x){
if(x & 1)
return !pr;
return pr;
}
inline int caut(int *v, int d, int p){
int i = -1, pas;
for(pas = (1 << 16); pas > 0; pas >>= 1){
if(i + pas < d && v[i + pas] < p + 1)
i += pas;
}
i++;
return i;
}
void qs(int *v, int st, int dr){
int i = st, j = dr, piv = v[(st + dr) / 2], aux;
while(i <= j){
while(v[i] < piv) i++;
while(v[j] > piv) j--;
if(i <= j){
aux = v[i]; v[i] = v[j]; v[j] =aux;
i++; j--;
}
}
if(st < j) qs(v, st, j);
if(i < dr) qs(v, i, dr);
}
inline void calc(){
if(v[0][0] < v[1][0])
pr = 1;
else
pr = 0;
drum[0] = v[pr][0];
dd++;
int p[2] = {0, 0}, cpr = pr;
while(p[0] < d[0] && p[1] < d[1]){
cpr = !cpr;
while(v[cpr][p[cpr]] < v[!cpr][p[!cpr]])
p[cpr]++;
drum[dd] = v[cpr][p[cpr]];
dd++;
}
}
int main(){
FILE *in = fopen("gropi.in", "r");
int c, n, i, x, y, x1, y1, x2, y2, p1, p2, add;
fscanf(in, "%d%d", &c, &n);
for(i = 0; i < n; i++){
fscanf(in, "%d%d", &x, &y);
x--; y--;
v[x][d[x]] = y;
d[x]++;
}
v[0][d[0]] = INF;
v[1][d[1]] = INF;
qs(v[0], 0, d[0] - 1);
qs(v[1], 0, d[1] - 1);
calc();
int m, aux;
fscanf(in, "%d", &m);
FILE *out = fopen("gropi.out", "w");
for(i = 0; i < m; i++){
fscanf(in, "%d%d%d%d", &x1, &y1, &x2, &y2);
x1--; y1--; x2--; y2--;
if(y1 > y2){
aux = x1; x1 = x2; x2 = aux;
aux = y1; y1 = y2; y2 = aux;
}
p1 = caut(drum, dd, y1);
p2 = caut(drum, dd, y2);
if(p1 != p2 || x1 != x2){
add = p2 - p1;
if(x1 != notm(p1))
add++;
if(x2 != notm(p2))
add++;
}
else{
p1 = caut(v[x1], d[x1], y1);
p2 = caut(v[x1], d[x1], y2);
if(p1 != p2)
add = 2;
else
add = 0;
}
fprintf(out, "%d\n", add + y2 - y1 + 1);
}
fclose(in);
fclose(out);
return 0;
}