#include<fstream>
#include<string>
using namespace std;
ifstream in("car.in");
ofstream out("car.out");
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}};
string buffer;
string::iterator buffer_it;
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;
}
}
void read_int_nn( int &x ) {
for ( ; *buffer_it>'9' || *buffer_it<'0'; ++buffer_it ) ;
for ( x= 0; *buffer_it>='0' && *buffer_it<='9'; ++buffer_it ) {
x= x*10+*buffer_it-'0';
}
}
int main (){
int player_unu=0;
getline(in, buffer, (char)0);
buffer_it = buffer.begin();
/*in>>n>>m;
in>>sx>>sy>>fx>>fy;*/
read_int_nn(n);
read_int_nn(m);
read_int_nn(sx);
read_int_nn(sy);
read_int_nn(fx);
read_int_nn(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++)
read_int_nn(v[i][j]);
sf = -1;
for(int i = 0; i<mmax; i++)
add(sx, sy, i, 1);
for(int q = 0; (q<=sf) && (!s); q++)
{
int i = car[q]>>12;
int 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--;
out<<s<<'\n';
return player_unu;
}