#include <stdio.h>
#include <algorithm>
using namespace std;
#define PII pair<int, int>
#define x first
#define y second
typedef struct { int lin, start, finish; } entry;
int C, N, M;
PII v[100005];
entry E[100005]; int ev;
inline void swap(int &a, int &b)
{
int aux = a;
a = b;
b = aux;
}
inline int BF(int y, int from)
{
int l, r, m, last = 0;
for (l = from, r = ev; l <= r; )
{
m = (l + r) / 2;
if (E[m].start > y) r = m-1;
else last = m, l = m+1;
}
return last;
}
inline int between(int y1, int y2)
{
int l, r, m;
for (l = 1, r = N; l <= r; )
{
m = (l + r) / 2;
if (v[m].x < y1) l = m+1;
else if (v[m].x > y2) r = m-1;
else return 1;
}
return 0;
}
int main(void)
{
int i, x1, y1, x2, y2;
int i1, i2;
freopen("gropi.in", "r", stdin);
freopen("gropi.out", "w", stdout);
scanf("%d %d", &C, &N);
for (i = 1; i <= N; ++i)
scanf("%d %d", &v[i].y, &v[i].x);
sort(v+1, v+N+1);
E[ev=1].lin = v[1].y; E[1].start = E[1].finish = v[1].x;
for (i = 2; i <= N; ++i)
if (E[ev].lin == v[i].y)
E[ev].finish = v[i].x;
else
++ev, E[ev].start = E[ev].finish = v[i].x, E[ev].lin = v[i].y;
E[0].start = E[0].finish = 0; E[0].lin = 3 - E[1].lin;
scanf("%d", &M);
for (; M; --M)
{
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
if (y1 > y2)
swap(x1, x2),
swap(y1, y2);
i1 = BF(y1, 1);
i2 = BF(y2, i1);
if (i1 < i2)
{
if (y1 < E[i1].finish)
printf("%d\n", y2-y1+1 + (E[i1].lin==x1) + (E[i2].lin==x2) + i2-i1);
else
printf("%d\n", y2-y1+1 + (E[i2].lin==x2) + i2-i1-(E[i1].lin==x1));
}
else
{
if (x1 != x2)
printf("%d\n", y2-y1+2);
else
printf("%d\n", y2-y1+1 + 2 * between(y1, y2));
}
}
return 0;
}