#include <iostream>
#include<cstring>
#include <vector>
#include <queue>
using namespace std;
const int N=1e3+10;
int a[N][N];
char c[N][N];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int n,m;
int x1,y1,x2,y2;
void bfs()
{
memset(a,-1,sizeof(a));
queue<pair<int,int>> q;
q.push({x1,y1});
a[x1][y1]=0;
while(q.size()>0)
{
auto v=q.front();
q.pop();
for(int i=0;i<4;i++)
{
if(v.first+dx[i]>=1&&v.first+dx[i]<=n&&v.second+dy[i]>=1&&v.second+dy[i]<=m&&a[v.first+dx[i]][v.second+dy[i]]==-1&&c[v.first+dx[i]][v.second+dy[i]]!='*')
{
q.push({v.first+dx[i],v.second+dy[i]});
a[v.first+dx[i]][v.second+dy[i]]=a[v.first][v.second]+1;
}
}
}
}
int main() {
cin>>n>>m;
cin>>x1>>y1>>x2>>y2;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>c[i][j];
}
}
bfs();
cout<<a[x2][y2];
return 0;
}
// 64 位输出请用 printf("%lld")