#include <algorithm>
using namespace std;
const int N = 100010;
int n,c,m;
int a[N];
pair<int,int> v[N];
int searcha ( int w ) {
int st, dr, mij;
for (st = 0, dr = n-1; st != dr; ) {
mij = (st+dr)/2;
if (v[mij].first <= w)
st = mij+1; else
dr = mij;
}
return st;
}
int searchb ( int w ) {
int st, dr, mij;
for (st = 0, dr = n-1; st != dr; ) {
mij = (st+dr+1)/2;
if (v[mij].first < w)
st = mij; else
dr = mij-1;
}
return st;
}
int main() {
freopen("gropi.in","rt",stdin);
freopen("gropi.out","wt",stdout);
scanf("%d %d",&c,&n);
for (int i = 0; i < n; ++i) scanf("%d %d",&v[i].second,&v[i].first);
v[n++] = make_pair(0,0);
v[n++] = make_pair(c+1,0);
sort(v,v+n);
a[0] = (v[0].second != v[1].second) ? 1 : 0;
// printf("(%d,%d) %d\n",v[0].first,v[0].second,a[0]);
for (int i = 1; i < n-1; ++i) {
a[i] = a[i-1] + (v[i].second != v[i+1].second);
// printf("(%d,%d) %d\n",v[i].first,v[i].second,a[i]);
}
// printf("(%d,%d)\n",v[n-1].first,v[n-1].second);
int sy, sx, fy, fx;
for (scanf("%d",&m); m; --m) {
scanf("%d %d %d %d",&sy,&sx,&fy,&fx);
if (sx > fx) {
sx ^= fx ^= sx ^= fx;
sy ^= fy ^= sy ^= fy;
}
// printf("%d %d %d %d\n",sy,sx,fy,fx);
int pa = searcha(sx);
if (v[pa].first >= fx) {
printf("%d\n",fx-sx + 1 + ((sy != fy) ? 1 : 0));
} else {
int pb = searchb(fx);
int rez = a[pb-1] - a[pa-1];
rez += (sy == v[pa].second);
rez += (fy == v[pb].second);
rez += fx - sx + 1;
printf("%d\n",rez);
}
}
return 0;
}