/*
TASK: hop
LANG: C++
*/

#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <iterator>
#include <functional>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#include <complex>
#include <cctype>
#include <sstream>
#include <string>
using namespace std;

typedef complex<double> Point;
typedef complex<double> Vector;
typedef pair<int,int> pii;
typedef set<int> si;
typedef vector<int> vi;
typedef vector<pii> vpii;
typedef vector<string> vs;

#define rep(i, n) for( __typeof(n) i=0; i<n; i++ )
#define f(i, a, b) for( __typeof(a) i=a; i<b; i++ )
#define x first
#define y second
#define sz size()
#define pb push_back
#define all(v) v.begin(), v.end()
#define wait system("pause")
#define print(v, type, div) copy(all(v), ostream_iterator<type>(cout, div) ); wait

typedef struct q_type
{
        pii pos;
        int lev;
        int c;
};



int M,N,X1,Y1,S1,X2,Y2,S2;
int A,B;
int square[1500];
map<int, int> is_square;
vpii a;
vpii b;
int used[1500][1500];
q_type q[100000];
q_type p,t;
int q_end;
int aend, bend;
int ans;


void Read()
{
     cin>>N>>M;
     cin>>X1>>Y1>>S1;
     cin>>X2>>Y2>>S2;
     
     A=S1*S1;
     B=S2*S2;
}

void Solve()
{
     rep(i, 1500) rep(j, 1500) used[i][j]=0;
     
     rep(i, 1500)
     {
            square[i]=i*i;
            
            is_square[i*i]=i;
     }
     
     f(i, 0, 1500)
     {
          if( i > S1 ) break;
          
          if( is_square.find(A - square[i])!=is_square.end() )
          {
              a.pb(pii(i, is_square[A - square[i]]));
          }
     }
     
     aend = a.sz;
     
     f(i, 0, 1500)
     {
          if( i > S2 ) break;
          
          if( is_square.find(B - square[i])!=is_square.end() )
          {
              b.pb(pii(i, is_square[B - square[i]]));
          }
     }
     
     bend = b.sz;
     
     p.pos=pii(X1,Y1);
     p.lev=0;
     p.c=1;
     
     q[0]=p;
     
     p.pos=pii(X2,Y2);
     p.lev=0;
     p.c=2;
     
     q[1]=p;
     
     q_end=2;
     
//     cout<<"\n\n";
     
     rep( q_st, q_end )
     {
          p=q[q_st];
          
/*
          cout<<"\n";
          cout<< p.pos.x <<"  "<< p.pos.y <<"\n";
          cout<< p.lev <<"\n";
          cout<< p.c <<"\n\n";
          wait;
*/
          
          if( p.c==1 )
          {
              rep(i, aend)
              {
                   t=p;
                   t.lev++;
                   
                   t.pos.x+=a[i].x;
                   t.pos.y+=a[i].y;
                   
                   if( (t.pos.x>=0 && t.pos.x<=N && t.pos.y>=0 && t.pos.y<=M) )
                   {
                   if( !used[t.pos.x][t.pos.y] )
                   {
                       used[t.pos.x][t.pos.y]=t.c;
                       
                       q[q_end++]=t;
                   }
                   
                   if( used[t.pos.x][t.pos.y]!=t.c )
                   {
                       ans=t.lev;
                       
                       return;
                   }
                   }
                   
                   t=p;
                   t.lev++;
                   
                   t.pos.x+=a[i].x;
                   t.pos.y-=a[i].y;
                   
                   if( (t.pos.x>=0 && t.pos.x<=N && t.pos.y>=0 && t.pos.y<=M) )
                   {
                   if( !used[t.pos.x][t.pos.y] )
                   {
                       used[t.pos.x][t.pos.y]=t.c;
                       
                       q[q_end++]=t;
                   }
                   
                   if( used[t.pos.x][t.pos.y]!=t.c )
                   {
                       ans=t.lev;
                       
                       return;
                   }
                   }
                   
                   t=p;
                   t.lev++;
                   
                   t.pos.x-=a[i].x;
                   t.pos.y+=a[i].y;
                   
                   if( (t.pos.x>=0 && t.pos.x<=N && t.pos.y>=0 && t.pos.y<=M) )
                   {
                   if( !used[t.pos.x][t.pos.y] )
                   {
                       used[t.pos.x][t.pos.y]=t.c;
                       
                       q[q_end++]=t;
                   }
                   
                   if( used[t.pos.x][t.pos.y]!=t.c )
                   {
                       ans=t.lev;
                       
                       return;
                   }
                   }
                   
                   t=p;
                   t.lev++;
                   
                   t.pos.x-=a[i].x;
                   t.pos.y-=a[i].y;
                   
                   if( (t.pos.x>=0 && t.pos.x<=N && t.pos.y>=0 && t.pos.y<=M) )
                   {
                   if( !used[t.pos.x][t.pos.y] )
                   {
                       used[t.pos.x][t.pos.y]=t.c;
                       
                       q[q_end++]=t;
                   }
                   
                   if( used[t.pos.x][t.pos.y]!=t.c )
                   {
                       ans=t.lev;
                       
                       return;
                   }
                   }
              }
          }
          

          if( p.c==2 )
          {
              rep(i, bend)
              {
                   t=p;
                   t.lev++;
                   
                   t.pos.x+=b[i].x;
                   t.pos.y+=b[i].y;
                   
                   if( (t.pos.x>=0 && t.pos.x<=N && t.pos.y>=0 && t.pos.y<=M) )
                   {
                   if( !used[t.pos.x][t.pos.y] )
                   {
                       used[t.pos.x][t.pos.y]=t.c;
                       
                       q[q_end++]=t;
                   }
                   
                   if( used[t.pos.x][t.pos.y]!=t.c )
                   {
                       ans=t.lev;
                       
                       return;
                   }
                   }
                   
                   t=p;
                   t.lev++;
                   
                   t.pos.x+=b[i].x;
                   t.pos.y-=b[i].y;
                   
                   if( (t.pos.x>=0 && t.pos.x<=N && t.pos.y>=0 && t.pos.y<=M) )
                   {
                   if( !used[t.pos.x][t.pos.y] )
                   {
                       used[t.pos.x][t.pos.y]=t.c;
                       
                       q[q_end++]=t;
                   }
                   
                   if( used[t.pos.x][t.pos.y]!=t.c )
                   {
                       ans=t.lev;
                       
                       return;
                   }
                   }
                   
                   t=p;
                   t.lev++;
                   
                   t.pos.x-=b[i].x;
                   t.pos.y+=b[i].y;
                   
                   if( (t.pos.x>=0 && t.pos.x<=N && t.pos.y>=0 && t.pos.y<=M) )
                   {
                   if( !used[t.pos.x][t.pos.y] )
                   {
                       used[t.pos.x][t.pos.y]=t.c;
                       
                       q[q_end++]=t;
                   }
                   
                   if( used[t.pos.x][t.pos.y]!=t.c )
                   {
                       ans=t.lev;
                       
                       return;
                   }
                   }
                   
                   t=p;
                   t.lev++;
                   
                   t.pos.x-=b[i].x;
                   t.pos.y-=b[i].y;
                   
                   if( (t.pos.x>=0 && t.pos.x<=N && t.pos.y>=0 && t.pos.y<=M) )
                   {
                   if( !used[t.pos.x][t.pos.y] )
                   {
                       used[t.pos.x][t.pos.y]=t.c;
                       
                       q[q_end++]=t;
                   }
                   
                   if( used[t.pos.x][t.pos.y]!=t.c )
                   {
                       ans=t.lev;
                       
                       return;
                   }
                   }
              }
          }
     }
}

void Write()
{
     cout<< ans <<"\n";
     
//     wait;
}

int main()
{
    Read();
    
    Solve();
    
    Write();
    
//    wait;
    
    return 0;
}

/*
TEST:
12 9
0 0 5
12 9 2

*/
