#include<stdio.h>
#include<string.h>
FILE *f=fopen("gropi.in","r"),
*g=fopen("gropi.out","w");
unsigned int i,j,n,m,k,x,y,c,x1,y1,x2,y2,au,piv1,piv2,lt;
struct sortstr
{ unsigned int x;
unsigned int y;
unsigned int i;
} a[130000],b[130000];
int count[1024],index2[1024],p;
void radix(struct sortstr *a,struct sortstr *b,int byte)
{ memset(count,0,sizeof(count));
for(i=1;i<=n;++i) ++count[(a[i].x>>byte)&1023];
index2[0]=1;
for(i=1;i<1024;++i) index2[i]=index2[i-1]+count[i-1];
for(i=1;i<=n;++i) { p=index2[(a[i].x>>byte)&1023]++;
b[p].x=a[i].x;
b[p].y=a[i].y;
}
}
unsigned int bs(unsigned int v)
{
unsigned int i, cnt;
for(i=1,cnt=(1<<20); cnt; cnt>>=1)
if(i+cnt<=n)
if(a[i+cnt].y<=v) i+=cnt;
return i;
}
void rad(struct sortstr *a)
{ radix(a,b,0);
radix(b,a,10);
radix(a,b,20);
radix(b,a,30);
}
int main()
{ fscanf(f,"%d %d",&c,&n);
a[1].x=1;
a[1].y=0;
for(i=1;i<=n;++i){ fscanf(f,"%d %d",&x,&y);
a[i+1].x=x;
a[i+1].y=y;
}
a[n+2].x=1;
a[n+2].y=c+1;
n+=2;
rad(a);
--n;
a[2].i=a[2].y-a[1].y;
for(i=3;i<=n;++i)a[i].i=a[i].y-a[i-1].y+a[i-1].i;
fscanf(f,"%d",&m);
++n;
for(i=1;i<=m;++i) { fscanf(f,"%d %d %d %d",&x1,&y1,&x2,&y2);
if(y1>y2){ au=y1;y1=y2;y2=au;au=x1;x1=x2;x2=au;}
piv1=bs(y1);
piv2=bs(y2);
while(a[piv1].y<y1) ++piv1;
while(a[piv2].y>y2)--piv2;
if(piv1>piv2){ lt=y2-y1+1;
if(x2!=x1) ++lt;
}
else{ lt=a[piv1].y-y1;
if(a[piv1].x==x1) ++lt;
lt+=a[piv2].i-a[piv1].i;
lt+=y2-a[piv2].y;
if(a[piv2].x==x2) ++lt;
++lt;
}
fprintf(g,"%d\n",lt);
}
fclose(f);
fclose(g);
return 0;
}