#include<cstdio>
using namespace std;
const int nmax = 506, mmax = 8, dmax = 7, ymax = 4090, xmax = 2093060;
int v[nmax][nmax], vmin[mmax][nmax][nmax], car[nmax * nmax * mmax], n, m, d, sx, sy, fx, fy, sf, s;
int dir[mmax][2]={{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
void add(int sx, int sy,int d,int ct){
int i, j;
for( i = sx, j = sy; !v[i][j] ; i += dir[d][0], j += dir[d][1])
if(!vmin[d][i][j])
{
vmin[d][i][j] = ct;
car[++sf] = (((i<<9) + j)<<3) + d;
if((i==fx) && (j==fy))
s = ct;
}
}
int main (){
int player_unu=0;
freopen("car.in", "r", stdin);
freopen("car.out", "w", stdout);
scanf("%d%d", &n, &m);
scanf("%d%d%d%d", &sx, &sy, &fx, &fy);
for(int i = 0;i <=n + 1; i++)
for(int j = 0; j<=m + 1; j++)
v[i][j] = 1;
for(int i = 1; i<=n; i++)
for(int j = 1; j<=m; j++)
scanf("%d", &v[i][j]);
sf = -1;
for(int i = 0; i<mmax; i++)
add(sx, sy, i, 1);
int i, j;
for(int q = 0; (q<=sf) && (!s); q++)
{
i = car[q]>>12;
j = (car[q]&ymax)>>3;
d = car[q] & dmax;
add(i, j, (d + 1) % mmax, vmin[d][i][j] + 1);
add(i, j, (d + mmax - 1) % mmax, vmin[d][i][j] + 1);
}
s--;
printf("%d\n", s);
fclose(stdin);
fclose(stdout);
return player_unu;
}