#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=10100;
int n,m,sx,sy,ex,ey,ans[N][N];
int dx[]={0,1,0,-1},dy[]={1,0-1,0};
char g[N][N];
int dfs(){
memset(ans,0x3f,sizeof(ans));
deque<PII> q;
q.push_front({sx,sy});
ans[sx][sy]=0;
while(q.size()){
PII u=q.front();q.pop_front();
int x=u.first,y=u.second;
if(x==ex&&y==ey){
return ans[x][y];
}
for(int i=0;i<4;i++){
int xx=x+dx[i],yy=y+dy[i];
if(xx<1||xx>n||yy<1||yy>m) continue;
if(ans[xx][yy]<=ans[x][y]||g[xx][yy]=='#') continue;
ans[xx][yy]=ans[x][y];q.push_front({xx,yy});
}
for(int i=-2;i<=2;i++){
for(int j=-2;j<=2;j++){
int xx=x+i,yy=y+j;
if(xx<1||xx>n||yy<1||yy>m) continue;
if(ans[xx][yy]<=ans[x][y]+1||g[xx][yy]=='#') continue;
ans[xx][yy]=ans[x][y]+1;
q.push_back({xx,yy});
}
}
}
return -1;
}
int main(){
cin>>n>>m;
cin>>sx>>sy;
cin>>ex>>ey;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>g[i][j];
}
}
cout<<dfs()<<endl;
return 0;
}