/*
TASK:hop
LANG:C
*/

#include<stdio.h>

int gosho[1503][1503] = {0};
int ceca[1503][1503] = {0};
int cecoe[1503][1503] = {0};
int m, n;

void dp1(int x, int y, int s, int br);
void dp2(int x, int y, int s, int br);
void dp3(int x, int y, int s, int br);

int main()
{
    int x1, y1, s1, x2, y2, s2;
    int i, j, min = 999999;
    
    scanf("%d %d", &m, &n);
    
    scanf("%d %d %d", &x1, &y1, &s1);
    scanf("%d %d %d", &x2, &y2, &s2);
    
    //dp1(x1, y1, s1, 0);
    dp2(x2, y2, s2, 0);
    dp3(x1, y1, s1, 0);
    
    
    /*for(i = 0; i <= m; i++)
    {
          for(j = 0; j <= n; j++)
          {
                printf("%d ", ceca[i][j]);
          }
          printf("\n");
    }
    
    for(i = 0; i <= m; i++)
    {
          for(j = 0; j <= n; j++)
          {
                printf("%d ", cecoe[i][j]);
          }
          printf("\n");
    }*/
    
    for(i = 0; i <= m; i++)
    {
          for(j = 0 ; j <= n; j++)
          {
                if(ceca[i][j] != 0 && cecoe[i][j] != 0)
                {
                              if(i == x1 && j == y1) if(min > ceca[i][j]) {min = ceca[i][j]; continue;}
                              if(i == x2 && j == y2) if(min > cecoe[i][j]) {min = cecoe[i][j]; continue;}
                              if(min > ceca[i][j] && ceca[i][j] >= cecoe[i][j]) {min = ceca[i][j]; continue;}
                              if(min > cecoe[i][j] && cecoe[i][j] > ceca[i][j]) {min = cecoe[i][j]; continue;}
                }
          }
    }
    
    if(min == 999999) printf("0\n");
    else printf("%d\n", min);              
    
    system("pause");
    
    return 0;
}

void dp1(int x, int y, int s, int br)
{
     if(x < 0 || x > m || y < 0 || y > n) return;
     gosho[x][y] = br;
     
     if(x-s >= 0) if(gosho[x-s][y] == 0 || gosho[x-s][y] > br+1) dp1(x-s, y, s, br+1);
     if(x+s <= m) if(gosho[x+s][y] == 0 || gosho[x+s][y] > br+1) dp1(x+s, y, s, br+1);
     if(y-s >= 0) if(gosho[x][y-s] == 0 || gosho[x][y+s] > br+1) dp1(x, y-s, s, br+1);
     if(y+s <= n) if(gosho[x][y+s] == 0 || gosho[x][y-s] > br+1) dp1(x, y+s, s, br+1);     
}

void dp2(int x, int y, int s, int br)
{
     if(x < 0 || x > m || y < 0 || y > n) return;
     ceca[x][y] = br;
     
     if(x-s >= 0) if(ceca[x-s][y] == 0 || ceca[x-s][y] > br+1) dp2(x-s, y, s, br+1);
     if(x+s <= m) if(ceca[x+s][y] == 0 || ceca[x+s][y] > br+1) dp2(x+s, y, s, br+1);
     if(y-s >= 0) if(ceca[x][y-s] == 0 || ceca[x][y-s] > br+1) dp2(x, y-s, s, br+1);
     if(y+s <= n) if(ceca[x][y+s] == 0 || ceca[x][y+s] > br+1) dp2(x, y+s, s, br+1);     
}

void dp3(int x, int y, int s, int br)
{
     if(x < 0 || x > m || y < 0 || y > n) return;
     cecoe[x][y] = br;
     
     if(x-s >= 0) if(cecoe[x-s][y] == 0 || cecoe[x-s][y] > br+1) dp3(x-s, y, s, br+1);
     if(x+s <= m) if(cecoe[x+s][y] == 0 || cecoe[x+s][y] > br+1) dp3(x+s, y, s, br+1);
     if(y-s >= 0) if(cecoe[x][y-s] == 0 || cecoe[x][y-s] > br+1) dp3(x, y-s, s, br+1);
     if(y+s <= n) if(cecoe[x][y+s] == 0 || cecoe[x][y+s] > br+1) dp3(x, y+s, s, br+1);     
}


