#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,l,x,y,a,b,ans;
char ch[1010][1010];
bool book[1010][1010];
int ne[4][2]={1,0,-1,0,0,1,0,-1};
struct node{
int x,y,z;
};
void slove(){
cin>>n>>m>>a>>b>>x>>y;
ans=1e18;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>ch[i][j];
}
}
queue<node>q;
q.push({a,b,0});
book[a][b]=true;
while(q.size()){
node t1=q.front();
q.pop();
if(t1.x==x && t1.y==y){
ans=min(ans,t1.z);
}
for(int i=0;i<4;i++){
int xx=t1.x+ne[i][0];
int yy=t1.y+ne[i][1];
if(xx>=1 && xx<=n && yy>=1 && yy<=m && !book[xx][yy] && ch[xx][yy]=='.'){
q.push({xx,yy,t1.z+1});
book[xx][yy]=true;
}
}
}
if(ans!=1e18) cout<<ans<<'\n';
else cout<<-1<<'\n';
}
signed main() {
int a, b;
int T=1;
while(T--){
slove();
}
}
// 64 位输出请用 printf("%lld")