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

#include<cstdio>
#include<queue>
#define nv -1

 using namespace std;
 
 struct point{int x,y;};

 int r1[1504][1504],r2[1504][1504],n,m;
 
 void wave1(int x, int y, int p[1504][2], int k)
 {
  int i,j,x1,y1;
  char f=1;
  point t;
//  pair<int,int> r;
  queue<point> q;
  t.x=x; t.y=y;
  q.push(t);

   while(!q.empty())
   {
    t=q.front();
    q.pop();
    x1=t.x;
    y1=t.y;
    
    for(i=0;i<k;i++)
     if(x1+p[i][0]>=0 && x1+p[i][0]<=n)
      if(y1+p[i][1]>=0 && y1+p[i][1]<=m)
       if(r1[x1+p[i][0]][y1+p[i][1]]==nv){
                                         r1[x1+p[i][0]][y1+p[i][1]]=r1[x1][y1]+1;
                                         t.x=x1+p[i][0]; t.y=y1+p[i][1]; 
                                         q.push(t);
                                         f=1;
                                        }
   }     
 }
 
 void wave2(int x, int y, int p[1504][2], int k)
 {
  int i,j,x1,y1;
  char f=1;
  point t;
//  pair<int,int> r;
  queue<point> q;
  t.x=x; t.y=y;
  q.push(t);

   while(!q.empty())
   {
    t=q.front();
    q.pop();
    x1=t.x;
    y1=t.y;
    
    for(i=0;i<k;i++)
     if(x1+p[k][0]>=0 && x1+p[k][0]<=n)
      if(y1+p[k][1]>=0 && y1+p[k][1]<=m)
       if(r2[x1+p[k][0]][y1+p[k][1]]==nv){
                                         r2[x1+p[k][0]][y1+p[k][1]]=r2[x1][y1]+1;
                                         t.x=x1+p[k][0]; t.y=y1+p[k][1]; 
                                         q.push(t);
                                         f=1;
                                        }
   }     
 }
 
 int findpos(int j, int a[1504][2])
 {
  int k=0,i,e;  
  for(i=0;i<=2*j;i++)
   for(e=0;e<=2*j;e++)
    if(j*j==((i-j)*(i-j)+(e-j)*(e-j))){a[k][0]=j-i; a[k][1]=j-e; k++;}         
  return k;    
 }
 
 void findsol()
 {
  int i,j,min=1<<30;    
  for(i=0;i<=n;i++)
   for(j=0;j<=m;j++)
    if(r1[i][j]!=nv && r2[i][j]!=nv)
     if(r1[i][j]+r2[i][j]<min)min=r1[i][j]+r2[i][j];
  printf("%d\n",min);
 }
 
 int main()
 {
  int x1,y1,j,t[1504][2];   
  scanf("%d%d",&n,&m);   
  
  for(x1=0;x1<=n;x1++)
  {
   for(y1=0;y1<=m;y1++)
    r1[x1][y1]=r2[x1][y1]=nv;
  }
/*  for(x1=0;x1<n;x1++)
  {
   for(y1=0;y1<m;y1++)
    printf("%d %d ",r1[x1][y1],r2[x1][y1]);
   printf("\n"); 
  }*/
  
  scanf("%d%d%d",&x1,&y1,&j);
  r1[x1][y1]=0;
  j=findpos(j,t);
  //for(int i=0;i<j;i++)printf("%d %d\n",t[i][0],t[i][1]);
  wave1(x1,y1,t,j);
  
  scanf("%d%d%d",&x1,&y1,&j);
  r2[x1][y1]=0;
  j=findpos(j,t);  
  wave2(x1,y1,t,j);

/*  for(x1=0;x1<=n;x1++)
  {
   for(y1=0;y1<=m;y1++)
    printf("%d %d  ",r1[x1][y1],r2[x1][y1]);
   printf("\n"); 
  }*/
    
  findsol();
//  scanf("%d%d",&n,&m);   
  return 0;   
 }
