#include<iostream>
#include<queue>
using namespace std;
struct node{
int x,y,step;
};
queue <node> q;
int n,m,sx,sy,ex,ey;
int map[105][105];
int vis[105][105];
int fx[5][2]={0,1,1,0,0,-1,-1,0};
void bfs(){
node a={sx,sy,0};
q.push(a);
vis[sx][sy]=1;
while(!q.empty()){
node s=q.front();
for(int i=0;i<4;i++){
int nx=s.x+fx[i][0];
int ny=s.y+fx[i][1];
if(nx>n||nx<1||ny>m||ny<1||vis[nx][ny]||map[nx][ny]) continue;
vis[nx][ny]=1;
a.x=nx,a.y=ny,a.step=s.step+1;
q.push(a);
if(ex==nx&&ey==ny){
cout<<a.step;
return;
}
}
q.pop();
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>map[i][j];
}
}
cin>>sx>>sy>>ex>>ey;
bfs();
return 0;
}