{
TASK:hop
LANG:Pascal
}
type moves=Record
       x,y:Longint;
     End;
var a:array[0..1500,0..1500] of Longint;
    b:Array[0..1500,0..1500] of Longint;
    move1,move2:Array[1..100] of moves;
    n,m,i,j,ax,ay,bx,by,l1,l2,s1,s2,k,min:Longint;
procedure primal;
Begin
  If l1>0 then
     If (a[i,j]>0)or((i=ax)and(j=ay)) then
      Begin
       For k:=1 to l1 do
       Begin
        If (i+move1[k].x<=n)and(i+move1[k].x>=0)and
           (j+move1[k].y<=m)and(j+move1[k].y>=0)and
           (i+move1[k].x<>ax)and(j+move1[k].y<>ay)
           then
         If a[i+move1[k].x,j+move1[k].y]=0 then a[i+move1[k].x,j+move1[k].y]:=a[i,j]+1
            else
            If a[i,j]+1<a[i+move1[k].x,j+move1[k].y] then
                a[i+move1[k].x,j+move1[k].y]:=a[i,j]+1;
       End;
      End;
    If l2>0 then
     If (b[i,j]>0)or((i=bx)and(j=by)) then
      Begin
       For k:=1 to l2 do
       Begin
        If (i+move2[k].x<=n)and(i+move2[k].x>=0)and
           (j+move2[k].y<=m)and(j+move2[k].y>=0)and
           (i+move2[k].x<>bx)and(j+move2[k].y<>by)
           then
         If b[i+move2[k].x,j+move2[k].y]=0 then b[i+move2[k].x,j+move2[k].y]:=b[i,j]+1
            else
            If b[i,j]+1<b[i+move2[k].x,j+move2[k].y] then
                b[i+move2[k].x,j+move2[k].y]:=b[i,j]+1;
       End;
      End;
End;
Begin
  ReadLn(n,m);
  ReadLn(ax,ay,s1);
  ReadLn(bx,by,s2);
 For i:=0 to n do
  For j:=0 to m do
  Begin
   If (i-ax) mod s1=0 then
    If (j-ay) mod s1=0 then
     a[i,j]:=abs(((i-ax) div s1)+((j-ay) div s1));
   If (i-bx) mod s2=0 then
    If (j-by) mod s2=0 then
     b[i,j]:=abs(((i-bx) div s2)+((j-by) div s2));
  End;
 For i:=-s1 to s1 do
  For j:=-s1 to s1 do
   If (i<>0)and(j<>0) then
   If (i*i+j*j)=s1*s1 then
   Begin
     l1:=l1+1;
     move1[l1].x:=i;
     move1[l1].y:=j;
   End;
 For i:=-s2 to s2 do
  For j:=-s2 to s2 do
   If (i<>0)and(j<>0)then
   If (i*i+j*j)=s2*s2 then
   Begin
     l2:=l2+1;
     move2[l2].x:=i;
     move2[l2].y:=j;
   End;
 {0..max,0..max}
 For i:=0 to n do
  For j:=0 to n do
   primal;
 {0..max,max..0}
 For i:=0 to n do
  For j:=m downto 0 do
   primal;
 {max..0,0..max}
 For i:=n downto 0 do
  For j:=0 to m do
   primal;
 {max..0,max..0}
 For i:=n downto 0 do
  For j:=m downto 0 do
   primal;

  min:=maxlongint;
 For i:=0 to n do
  For j:=0 to m do
   If ((a[i,j]>0)and(b[i,j]>0))or((i=ax)and(j=ay)and(b[i,j]>0))or
   ((i=bx)and(j=by)and(a[i,j]>0)) then
    If a[i,j]+b[i,j]<min then min:=a[i,j]+b[i,j];
 If min<>maxlongint then WriteLn(min) else WriteLn('0');
 {Debug);}
 {For i:=n downto 0 do
 Begin
  For j:=0 to m do
   Write(a[i,j]:5);
   WriteLn;
 End;
  WriteLn;
 For i:=n downto 0 do
 Begin
  For j:=0 to m do
   Write(b[i,j]:5);
   WriteLn;
 End;}
end.