/*
TASK:hop
LANG:C
*/
#include <stdio.h>
#define MAXN 1505
#define INF 4e9

int hop[2][MAXN][MAXN];
int jump[2][MAXN][2];
int nj[2];
int N, M;

main()
{
   int i, j, x, y, s, ret;
   scanf("%d %d", &N, &M);
   for(i=0; i<=N; i++)
      for(j=0; j<=M; j++)
         hop[0][i][j] = hop[1][i][j] = -1;

   scanf("%d %d %d", &x, &y, &s);
   setjump(s, 0);
   hfill(x, y, 0, 0);

   scanf("%d %d %d", &x, &y, &s);
   setjump(s, 1);
   hfill(x, y, 0, 1);

   ret = INF;
   for(i=0; i<=N; i++)
      for(j=0; j<=M; j++)
         if(hop[0][i][j] != -1 && hop[1][i][j] != -1 && hop[0][i][j] + hop[1][i][j] < ret)
            ret = hop[0][i][j] + hop[1][i][j];
   printf("%d\n", ret);
   return 0;
}

setjump(int s, int who)
{
   int i, j;
   nj[who]=0;
   for(i=0; i<=s; i++)
      for(j=0; j<=s; j++)
         if(s*s == i*i + j*j)
         {  
            jump[who][nj[who]][0] = i;
            jump[who][nj[who]][1] = j;
            nj[who]++;
         }
}

hfill(int x, int y, int nJump, int who)
{
   int que[MAXN][2], st=0, en=1, level=1, j;
   que[0][0]=x; que[0][1]=y;
   hop[who][x][y]=0;
   int i, difx, dify;
   
   while(st!=en)
   {
      nJump++;
      for(j=st; j!=level; j = j+1<MAXN?j+1:0)
      {
         x = que[st][0];
         y = que[st][1];
         st = st+1<MAXN?st+1:0;
         for(i=0; i<nj[who]; i++)
         {
            difx = jump[who][i][0];
            dify = jump[who][i][1];
      
            if(x+difx>=0 && y+dify>=0 && x+difx<=N && y+dify<=M && hop[who][x+difx][y+dify]==-1)
            {
               que[en][0] = x+difx;
               que[en][1] = y+dify;
               en = en+1<MAXN?en+1:0;
               hop[who][x+difx][y+dify] = nJump;
            }
            if(x+difx>=0 && y-dify>=0 && x+difx<=N && y-dify<=M && hop[who][x+difx][y-dify]==-1)
            {
               que[en][0] = x+difx;
               que[en][1] = y-dify;
               en = en+1<MAXN?en+1:0;
               hop[who][x+difx][y-dify] = nJump;
            }
            if(x-difx>=0 && y+dify>=0 && x-difx<=N && y+dify<=M && hop[who][x-difx][y+dify]==-1)
            {
               que[en][0] = x-difx;
               que[en][1] = y+dify;
               en = en+1<MAXN?en+1:0;
               hop[who][x-difx][y+dify] = nJump;
            }
            if(x-difx>=0 && y-dify>=0 && x-difx<=N && y-dify<=M && hop[who][x-difx][y-dify]==-1)
            {
               que[en][0] = x-difx;
               que[en][1] = y-dify;
               en = en+1<MAXN?en+1:0;
               hop[who][x-difx][y-dify] = nJump;
            }
         }
      }
      level = en;
   }
}
