// #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432
// 最短路先想bfs
#include <iostream>
#include <vector>
#include <cmath>
#include <queue>
#include <array>
#define pre(i,j,k) for (int i = j; i < k; i++)
#define pi pair<int,int>
using namespace std;
array<int, 4> dx{0,0,1,-1}, dy{1,-1,0,0};
int main() {
ios_base::sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<vector<char>> a(n, vector<char>(m));
vector<vector<int>> len(n,vector<int>(m, -1));
bool flag = 1;
int qx, qy, fx, fy;
cin >> qx >> qy >> fx >> fy;
len[qx - 1][qy - 1] = 0;
if (qx == fx && qy == fy){
cout << 0;
return 0;
}
pre(i,0,n)
pre(j,0,m)
cin >> a[i][j];
queue<pi> q;
q.push(pi(qx - 1, qy - 1));//----------起点入队
while(!q.empty()){//---------如果队列不为空
pi np = q.front();
q.pop();
pre(i,0,4){
int nx = np.first + dx[i], ny = np.second + dy[i];
if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;//-------各种检测
if (a[nx][ny] == '*') continue;
else if (len[nx][ny] != -1) continue;
q.push(pi(nx, ny));
len[nx][ny] = len[np.first][np.second] + 1;//---------跟新起点到这个点的最短路
if (nx == fx - 1 && ny == fy - 1){//---------如果找到了终点
flag = 0;
break;
}
}
}
if (flag) {//--------如果从起点能走到的点都遍历完了还没找到终点
cout << -1;
}
return 0;
}
// 64 位输出请用 printf("%lld")