#include<stdio.h>
#include<algorithm>
using namespace std;
struct groapa{int a, b;}v[100002];
int x[2][100001],j,sol,i,k,l,m,n,ia,ib,fa,fb,mina,minb=100001;
int cmp(groapa a,groapa b){
return a.b<b.b;}
int caut(int val,int l){
int p=1,u=m,mij;
while(p<u)
{mij=(p+u)>>1;
if(v[mij].b<val)p=mij+1;
else
u=mij;}
if(x[l][val]!=x[v[u].a][v[u].b])
return 0;
else
return v[u].b;
}
int main(){
FILE *f=fopen("gropi.in","r");
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=m;i++)
{fscanf(f,"%d %d",&v[i].a,&v[i].b);
v[i].a--;
x[v[i].a][v[i].b]=-1;
if(v[i].b<minb){
minb=v[i].b;mina=1-v[i].a;}
}
k=1;
l=mina;
for(i=1;i<=n;i++)
{if(x[1-l][i]==-1)
{k++;l=1-l;}
x[0][i]=x[1][i]=k;
}
sort(v+1,v+1+m,cmp);
fscanf(f,"%d",&k);
FILE *g=fopen("gropi.out","w");
for(i=1; i <= k;i++)
{ fscanf(f,"%d %d %d %d",&ia,&ib,&fa,&fb);
ia--;fa--;
if(ib>fb)
{l=ib;ib=fb;fb=l;
l=ia;ia=fa;fa=l;
}
sol=fb-ib+1;
if(x[ia][ib]!=x[fa][fb])
{sol+=x[fa][fb]-x[ia][ib];
if(x[fa][fb]%2==0)
{if(fa==1-mina)sol++;}
else
{if(fa==mina)sol++;}
l=x[ia][ib]%2;
if(!l)
{if(ia==1-mina)
if(caut(ib,ia))sol++;
else
sol--;}
else
{if(ia==mina)
if(caut(ib,ia))sol++;
else
sol--;}
}
else
if(caut(ib,ia)!=caut(fb,fa))
sol+=2;
fprintf(g,"%d\n",sol);
}
fclose(f);
fclose(g);
return 0;}