#include<stdio.h>
#include<stdlib.h>
long int n,m,a[502][502],si,sj,fi,fj,i,j,ih[20],jh[20],dh[20],ch[20],
lh,i1,j1,d1,c1,i2,j2,d2,c2,
pr[8][8],sol,di[8],dj[8],dest[8][5],cost[8][5],fil[502][502];
void fill(long int ii,long int jj);
int main()
{
for(i=0;i<=6;i++)for(j=i+1;j<=7;j++){ pr[i][j]=j-i;if(pr[i][j]>4)pr[i][j]=8-pr[i][j];pr[j][i]=pr[i][j];}
di[0]=-1;di[1]=-1;di[2]= 0;di[3]= 1;di[4]= 1;di[5]=-1;di[6]= 0;di[7]=-1;
dj[0]= 0;dj[1]= 1;dj[2]= 1;dj[3]= 1;dj[4]= 0;dj[5]= 1;dj[6]=-1;dj[7]=-1;
for(i=0;i<=7;i++)
{ dest[i][0]=i;cost[i][0]=0;
dest[i][1]=i+1;if(dest[i][1]>=8)dest[i][1]-=8;cost[i][1]=1;
dest[i][2]=i-1;if(dest[i][2]<0)dest[i][2]+=8;cost[i][2]=1;
dest[i][3]=i+2;if(dest[i][3]>=8)dest[i][3]-=8;cost[i][3]=2;
dest[i][4]=i-2;if(dest[i][4]<0)dest[i][4]+=8;cost[i][4]=2;
}
FILE *f,*g;f=fopen("car.in","r");g=fopen("car.out","w");
fscanf(f,"%ld%ld",&n,&m);
fscanf(f,"%ld%ld",&si,&sj);
fscanf(f,"%ld%ld",&fi,&fj);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
fscanf(f,"%ld",&a[i][j]);
for(i=0;i<=n+1;i++)
{a[i][0]=1;a[i][m+1]=1;}
for(j=0;j<=m+1;j++)
{a[0][j]=1;a[n+1][j]=1;}
fill(si,sj);
if(!fil[fi][fj]){fprintf(g,"-1\n");fcloseall();return 0;}
for(i=1;i<=8;i++)
{ ih[i]=si;jh[i]=sj;dh[i]=i-1;ch[i]=0;}
lh=8;
//while(ih[1]!=fi||jh[1]!=fj)
//{ i1=ih[1];j1=jh[1];d1=dh[1];c1=ch[1];}
fprintf(g,"%ld\n",sol);
fcloseall();
return 0;
}
void fill(long int ii,long int jj)
{ if(a[ii][jj])return;
if(fil[ii][jj])return;
fil[ii][jj]=1;
if(fil[fi][fj])return;
fill(ii-1,jj-1);
if(fil[fi][fj])return;
fill(ii-1,jj);
if(fil[fi][fj])return;
fill(ii-1,jj+1);
if(fil[fi][fj])return;
fill(ii,jj-1);
if(fil[fi][fj])return;
fill(ii,jj+1);
if(fil[fi][fj])return;
fill(ii+1,jj-1);
if(fil[fi][fj])return;
fill(ii+1,jj);
if(fil[fi][fj])return;
fill(ii+1,jj+1);
}