#include <bits/stdc++.h>
using namespace std;
const int MAXN =1010;
char f[MAXN][MAXN];
int f2[MAXN][MAXN];
int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//方位
int n,m;
int x,y;
int x2,y2;
void bfs()
{
queue<pair<int,int>> q;//打队列
q.push(make_pair(x,y));
f2[x][y] = 0;
while(!q.empty())//bfs模板
{
int ux = q.front().first;
int uy = q.front().second;
if(ux == x2 && uy == y2)return;//到目标点就退出,剩下的点没必要搜了
q.pop();
for(int i=0;i<4;i++)
{
int dx = ux + dir[i][0];
int dy = uy + dir[i][1];
if(dx<1 || dx>n || dy<1 || dy>m) continue;
if(f2[dx][dy] != -1 || f[dx][dy] == '*' )continue;
f2[dx][dy] = f2[ux][uy] + 1;
q.push(make_pair(dx,dy));
}
}
}
int main()
{
memset(f2,-1,sizeof(f2));//初始化为-1,为何是-1?因为想少开个数组来判断是否已经访问过
cin >> n >> m;//输入坐标
cin >> x >> y;
cin >> x2 >> y2;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin >> f[i][j];
}
}
bfs();//bfs搜最短路径
cout << f2[x2][y2] << endl;//输出目标路径
return 0;
}