var f,g:text;
ok:boolean;
a,b:array[1..10000000]of integer;
v:array[0..3,0..1000000000]of integer;
h,l,c,n,m,i,nr,x,y,x1,x2,y1,y2:longint;
begin
assign(f,'gropi.in');reset(f);
assign(g,'gropi.out');rewrite(g);
read(f,c,n);
l:=2;
for i:=1 to n do begin
read(f,x,y);
v[x,y]:=-1;
end;
read(f,m);
for h:=1 to m do begin
read(f,x1,y1,x2,y2);
ok:=false;
a[1]:=x1;
b[1]:=y1;
nr:=1;
while not ok do begin
x:=a[nr];
y:=b[nr];
if (v[x+1,y]=0)and(x<>l) then begin
v[x+1,y]:=v[x,y]+1;
a[i]:=x+1;
b[i]:=y;
inc(i);
end;
if (a[i-1]=x2)and(b[i-1]=y2) then begin
ok:=true;
break;
end;
if (v[x-1,y]=0)and(x<>1) then begin
v[x-1,y]:=v[x,y]+1;
a[i]:=x-1;
b[i]:=y;
inc(i);
end;
if (a[i-1]=x2)and(b[i-1]=y2) then begin
ok:=true;
break;
end;
if (v[x,y+1]=0)and(y<>l) then begin
v[x,y+1]:=v[x,y]+1;
a[i]:=x;
b[i]:=y+1;
inc(i);
end;
if (a[i-1]=x2)and(b[i-1]=y2) then begin
ok:=true;
break;
end;
if (v[x,y-1]=0)and(y<>1) then begin
v[x,y-1]:=v[x,y]+1;
a[i]:=x;
b[i]:=y-1;
inc(i);
end;
if (a[i-1]=x2)and(b[i-1]=y2) then begin
ok:=true;
break;
end;
inc(nr);
end;
writeln(g,v[x2,y2]);
end;
close(f);
close(g);
end.