var a,b,c,v1,v2,a1,a2:array[1..100100]of longint;
n,i,j,k,o,x1,m,x2,y1,y2,c1,c2,c3,k1,k2,l,r1,r2:longint;
f1,f2:text;
procedure merge(p,r:longint);
var q,e,f,g:longint;
begin
q:=(p+r)div 2;
if p<q then merge(p,q);
if q+1<r then merge(q+1,r);
for i:=p to r do
begin
a1[i]:=v1[i];
a2[i]:=v2[i];
end;
e:=p;
f:=q+1;
g:=p;
while(e<=q)and(f<=r)do
if a2[e]<a2[f] then begin v2[g]:=a2[e];
v1[g]:=a1[e];
e:=e+1;
g:=g+1;
end
else begin v2[g]:=a2[f];
v1[g]:=a1[f];
f:=f+1;
g:=g+1;
end;
while(e<=q)do
begin
v2[g]:=a2[e];
v1[g]:=a1[e];
g:=g+1;
e:=e+1;
end;
while(f<=r)do
begin
v2[g]:=a2[f];
v1[g]:=a1[f];
g:=g+1;
f:=f+1;
end;
end;
begin
assign(f1,'gropi.in');
reset(f1);
assign(f2,'gropi.out');
rewrite(f2);
read(f1,o,n);
for i:=1 to n do
read(f1,v1[i],v2[i]);
merge(1,n);
k:=1;
l:=1;
a[1]:=1;
c[1]:=v1[1];
for i:=2 to n do
if v1[i]<>c[k] then begin b[k]:=v2[i]-1;
k:=k+1;
c[k]:=v1[i];
a[k]:=v2[i-1]+1;
end;
b[k]:=o;
read(f1,m);
for i:=1 to m do
begin
read(f1,x1,y1,x2,y2);
if y1>y2 then begin c1:=y1;
y1:=y2;
y2:=c1;
c1:=x1;
x1:=x2;
x2:=c1;
end;
c1:=1;
c2:=k;
while(c2-c1>2)do
begin
c3:=(c1+c2)div 2;
if(y1<a[c3])then c2:=c3-1
else c1:=c3;
end;
r1:=0;
r2:=0;
for j:=c1-1 to c2+1 do
if(a[j]<=y1)and(y1<=b[j])then begin k1:=j;
r1:=r1+1;
end;
c1:=1;
c2:=k;
while(c2-c1>2)do
begin
c3:=(c1+c2)div 2;
if(y2>b[c3])then c1:=c3+1
else c2:=c3;
end;
l:=0;
for j:=c2+1 downto c1-1 do
if(a[j]<=y2)and(y2<=b[j])then begin k2:=j;
r2:=r2+1;
end;
if x1=c[k1] then l:=l+1;
if x2=c[k2] then l:=l+1;
if((r2=2)and(r1=2)and(abs(k1-k2)<1))or((y1<v2[1])and(y2<v2[1]))or((y1>v2[n])and(y2>v2[n]))then writeln(f2,y2-y1+1+abs(x1-x2))
else writeln(f2,y2-y1+1+l+k2-k1);
end;
close(f1);
close(f2);
end.