/*
TASK:hop
LANG:C++
*/
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
#include <math.h>

#define MP make_pair
#define x first
#define y second
#define PB push_back
#define ALL(v) v.begin(),v.end()
#define VI vector<int>
#define pii pair<int,int>

using namespace std;

int n,m,xx1,yy1,x2,y2,c1,c2,pc1,pc2;
int a[2028][1510],b[2028][1510];
pii q[2251000],p1[3000],p2[3000];

int main()
{
    int i,j,k,l,s,e;
    scanf("%d%d",&n,&m);
    scanf("%d%d%d",&xx1,&yy1,&c1);
    scanf("%d%d%d",&x2,&y2,&c2);
    
    double d,d1; pc1=0; pc2=0;
    for (i=-c1; i<=c1; i++)
    {
        d=sqrt((double)(c1*c1-i*i));
        if ( d - (double)(int)d < 0.0000001 ) { p1[pc1++]=MP(i,int(d)); if ((int)d!=0) p1[pc1++]=MP(i,-(int)d); }
    }
    for (i=-c2; i<=c2; i++)
    {
        d=sqrt((double)(c2*c2-i*i));
        if ( d - (double)(int)d < 0.0000001 ) { p2[pc2++]=MP(i,int(d)); if ((int)d!=0) p2[pc2++]=MP(i,-(int)d); }
    }
    /*
    for (i=0; i<pc1; i++)
     cout<<p1[i].x<<" "<<p1[i].y<<endl;
     cout<<endl;
    for (i=0; i<pc2; i++)
     cout<<p2[i].x<<" "<<p2[i].y<<endl;
     cout<<endl; */
    
    q[0]=MP(xx1,yy1);
    a[xx1][yy1]=1; pii p;
    for (s=0,e=1; s<e; s++)
    {
          for (j=0; j<pc1; j++)
          {
            p=MP(q[s].x+p1[j].x,q[s].y+p1[j].y);
            if (p.x>=0 && p.x<=n && p.y>=0 && p.y<=m && !a[p.x][p.y]) { q[e++]=p; a[p.x][p.y]=a[q[s].x][q[s].y]+1; }
          } 
/*    for (i=0; i<=n; i++)
    {
     for (j=0; j<=m; j++)
      cout<<a[i][j]<<" "; cout<<endl; }
      cout<<endl; */
/*      for (i=0; i<e; i++)
       cout<<"("<<q[i].x<<","<<q[i].y<<") ";
       cout<<endl; */
    }
    q[0]=MP(x2,y2);
    b[x2][y2]=1;
    for (s=0,e=1; s<e; s++)
    {
          for (j=0; j<pc2; j++)
          {
            p=MP(q[s].x+p2[j].x,q[s].y+p2[j].y);
            if (p.x>=0 && p.x<=n && p.y>=0 && p.y<=m && !b[p.x][p.y]) { q[e++]=p; b[p.x][p.y]=b[q[s].x][q[s].y]+1; }
          } 
    }
    
    /*
    for (i=0; i<=n; i++)
    {
     for (j=0; j<=m; j++)
      cout<<a[i][j]<<" "; cout<<endl; }
      cout<<endl;
    for (i=0; i<=n; i++)
    {
     for (j=0; j<=m; j++)
      cout<<b[i][j]<<" "; cout<<endl; }
     */                  
    
    int mm=1000000000;
    for (i=0; i<=n; i++)
     for (j=0; j<=m; j++)
      if (a[i][j] && b[i][j] && a[i][j]+b[i][j]<mm)
       mm=a[i][j]+b[i][j];
       
     if (mm==1000000000)  mm=2;
       
    printf("%d\n",mm-2);   
        
    return 0;
}
