#include <stdio.h>
#define nmax 100005
int X[nmax], Y[nmax], X2[nmax], Y2[nmax], r[nmax];
int suma[nmax];
int C, N, M, xi, xf, yi, yf, st, dr, ans;
void msort(int l, int r)
{
int i, j, k;
if (l >= r) return;
int m = (l+r)>>1;
msort(l, m);
msort(m+1, r);
for (i = k = l, j = m+1; i <= m && j <= r;)
{
if (X[i] < X[j])
{
X2[k] = X[i];
Y2[k++] = Y[i++];
}
else
{
X2[k] = X[j];
Y2[k++] = Y[j++];
}
}
for (; i <= m; X2[k] = X[i], Y2[k] = Y[i], ++i, ++k);
for (; j <= r; X2[k] = X[j], Y2[k] = Y[j], ++j, ++k);
for (k = l; k <= r; X[k] = X2[k], Y[k] = Y2[k], ++k);
}
void binary_left(int v, int l, int r, int &st)
{
if (l > r)
return;
int m = (l+r)>>1;
if (v <= X[m])
{
st = m;
binary_left(v, l, m-1, st);
}
else
binary_left(v, m+1, r, st);
}
void binary_rite(int v, int l, int r, int &dr)
{
if (l > r)
return;
int m = (l+r)>>1;
if (v >= X[m])
{
dr = m;
binary_rite(v, m+1, r, dr);
}
else
binary_rite(v, l, m-1, dr);
}
int main()
{
int i;
freopen("gropi.in", "r", stdin);
freopen("gropi.out", "w", stdout);
scanf("%d%d", &C, &N);
for (i = 1; i <= N; ++i)
scanf("%d%d", &Y[i], &X[i]);
msort(1, N);
// micsorez numarul de chestii identice
for (i = 2; i <= N; ++i)
if (Y[i] == Y[i-1])
{
r[i] = 1;
r[0]++;
}
for (i = ans = 1; i <= N; ++i)
if (r[i] == 0)
{
X[ans] = X[i];
Y[ans] = Y[i];
++ans;
}
for (i = 2, N = N-r[0]; i <= N; ++i)
suma[i] = suma[i-1] + (X[i]-X[i-1]) + 1;
scanf("%d", &M);
for (i = 1; i <= M; ++i)
{
scanf("%d%d%d%d", &yi, &xi, &yf, &xf);
if (xi > xf)
{
ans = xi; xi = xf; xf = ans;
ans = yi; yi = yf; yf = ans;
}
st = dr = ans = 0;
binary_left(xi, 1, N, st);
binary_rite(xf, 1, N, dr);
if (X[st] <= xf && xi <= X[dr] && st && dr)
{
ans += X[st]-xi + (Y[st] == yi);
ans += xf-X[dr] + (Y[dr] == yf);
ans += suma[dr]-suma[st];
}
else
ans = xf-xi + (yf != yi);
ans++;
printf("%d\n", ans);
}
return 0;
}