#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1010;
char g[N][N];
ll dist[N][N];
int n, m;
int xs, ys, xt, yt;
using pII = pair<int, int>;
pII q[N*N];// queue<pair<int, int>>q;
int hh = 0; int tt = -1;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
int bfs() {
q[++tt] = {xs,ys};// q.push({xs,ys});
memset(dist,-1,sizeof(dist));
dist[xs][ys] = 0;
while(hh <= tt ){ //while(!q.empty())
auto t = q[hh++];// auto t = q.front(); q.pop();
for(int i = 0;i < 4; i++){
int a = t.first+dx[i]; int b = t.second + dy[i];
if(a<1||a>n||b<1||b>m) continue;
if(g[a][b] == '*')continue;
if(dist[a][b] >=0 ) continue;
dist[a][b] = dist[t.first][t.second]+1;
q[++tt] = {a,b}; //q.push({a,b});
if(a == xt && b == yt) return dist[a][b];
}
}
return -1;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
cin >> xs >> ys >> xt >> yt;
for(int i = 1;i<=n;i++){
for(int j = 1; j <= m; j++){
cin >> g[i][j];
}
}
cout << bfs();
}