/*
TASK:hop
LANG:C++
*/
#include<stdio.h>
#include<math.h>
#include<queue>
#include<vector>
#define MAX 1510
//#define MAX 15
using namespace std;
pair<int,int> tmp;
queue<pair<int,int> > q;
int n,m,x0,y00,x1,y11,s1,s2,x,y,p2[32],z,grr,d;
int final=100000,otg;
int masiv0[MAX][MAX];
int masiv1[MAX][MAX];
int masiv[2][2000];
bool used[2][2000];

int binsearch()
{
z=0;
for(d=11;d>=0;d--)
if((z+p2[d])*(z+p2[d])<=grr)
                            z+=p2[d];
return z;
}

void input()
{
p2[0]=1;
for(x=1;x<=20;x++)
                  p2[x]=p2[x-1]*2;
scanf("%d%d",&n,&m);
scanf("%d%d%d",&x0,&y00,&s1);
scanf("%d%d%d",&x1,&y11,&s2);
for(x=0;x*x<=s1*s1;x++)
{
grr=s1*s1-x*x;
y=binsearch();
if(y*y+x*x==s1*s1)
               {
               used[0][x]=1;
               masiv[0][x]=y;
               }
}

for(x=0;x*x<=s2*s2;x++)
{
grr=s2*s2-x*x;
y=binsearch();
if(y*y+x*x==s2*s2)
               {
               used[1][x]=1;
               masiv[1][x]=y;
               }
}
return;
}


void bfs0()
{
for(x=0;x<=n;x++)
for(y=0;y<=m;y++)
                 masiv0[x][y]=-1;

tmp.first=x0;
tmp.second=y00;
masiv0[x0][y00]=0;
q.push(tmp);

while(!q.empty())
{
tmp=q.front();x0=tmp.first;y00=tmp.second;q.pop();

for(x=0;x<=s1;x++)
if(used[0][x])
              {
              if(x0+x<=n&&y00+masiv[0][x]<=m&&masiv0[x0+x][y00+masiv[0][x]]==-1)
              {
              tmp.first=x0+x;
              tmp.second=y00+masiv[0][x];
              q.push(tmp);
              masiv0[x0+x][y00+masiv[0][x]]=masiv0[x0][y00]+1;
              }

              if(x0+x<=n&&y00-masiv[0][x]>=0&&masiv0[x0+x][y00-masiv[0][x]]==-1)
              {
              tmp.first=x0+x;
              tmp.second=y00-masiv[0][x];
              q.push(tmp);
              masiv0[x0+x][y00-masiv[0][x]]=masiv0[x0][y00]+1;
              }

              if(x0-x>=0&&y00+masiv[0][x]<=m&&masiv0[x0-x][y00+masiv[0][x]]==-1)
              {
              tmp.first=x0-x;
              tmp.second=y00+masiv[0][x];
              q.push(tmp);
              masiv0[x0-x][y00+masiv[0][x]]=masiv0[x0][y00]+1;
              }

              if(x0-x>=0&&y00-masiv[0][x]>=0&&masiv0[x0-x][y00-masiv[0][x]]==-1)
              {
              tmp.first=x0-x;
              tmp.second=y00-masiv[0][x];
              q.push(tmp);
              masiv0[x0-x][y00-masiv[0][x]]=masiv0[x0][y00]+1;
              }
              
              }
}

return;
}

void bfs1()
{
for(x=0;x<=n;x++)
for(y=0;y<=m;y++)
                 masiv1[x][y]=-1;

tmp.first=x1;
tmp.second=y11;
masiv1[x1][y11]=0;
q.push(tmp);

while(!q.empty())
{
tmp=q.front();x1=tmp.first;y11=tmp.second;q.pop();

for(x=0;x<=s2;x++)
if(used[1][x])
              {
              if(x1+x<=n&&y11+masiv[1][x]<=m&&masiv1[x1+x][y11+masiv[1][x]]==-1)
              {
              tmp.first=x1+x;
              tmp.second=y11+masiv[1][x];
              q.push(tmp);
              masiv1[x1+x][y11+masiv[1][x]]=masiv1[x1][y11]+1;
              }

              if(x1+x<=n&&y11-masiv[1][x]>=0&&masiv1[x1+x][y11-masiv[1][x]]==-1)
              {
              tmp.first=x1+x;
              tmp.second=y11-masiv[1][x];
              q.push(tmp);
              masiv1[x1+x][y11-masiv[1][x]]=masiv1[x1][y11]+1;
              }

              if(x1-x>=0&&y11+masiv[1][x]<=m&&masiv1[x1-x][y11+masiv[1][x]]==-1)
              {
              tmp.first=x1-x;
              tmp.second=y11+masiv[1][x];
              q.push(tmp);
              masiv1[x1-x][y11+masiv[1][x]]=masiv1[x1][y11]+1;
              }

              if(x1-x>=0&&y11-masiv[1][x]>=0&&masiv1[x1-x][y11-masiv[1][x]]==-1)
              {
              tmp.first=x1-x;
              tmp.second=y11-masiv[1][x];
              q.push(tmp);
              masiv1[x1-x][y11-masiv[1][x]]=masiv1[x1][y11]+1;
              }
              
              }
}

return;
}


int main()
{
input();
bfs0();
bfs1();
/*
for(x=0;x<=n;x++)
{
for(y=0;y<=m;y++)
printf("%d ",masiv1[x][y]);
printf("\n");
}
*/

for(x=0;x<=n;x++)
for(y=0;y<=m;y++)
if(masiv0[x][y]!=-1&&masiv1[x][y]!=-1)
                 {
                 otg=masiv0[x][y];
                 if(masiv1[x][y]>otg)
                                     otg=masiv1[x][y];
                 if(otg<final)
                              final=otg;
                 }
printf("%d\n",final);
return 0;
}

