#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
using namespace std;
char sts[50][50];
bool visited[50][50];
int DFS(int i, int j, int x2, int y2, int m, int n);
int minValue4(int sum1,int sum2,int sum3,int sum4);
int minValue3(int sum1,int sum2,int sum3);
int minValue2(int sum1,int sum2);
int main() {
int m, n;
int x1, y1, x2, y2;
cin >> m >> n;
cin >> x1 >> y1 >> x2 >> y2;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> sts[i][j];
visited[i][j] = false;
}
}
int sum;
if (sts[x1][y1] == '#') {
visited[x1][y1] = true;
} else {
if (!visited[x1][y1]) {
sum = DFS(x1, y1, x2, y2, m, n);
}
}
printf("%d\n", sum);
return 0;
}
int DFS(int i, int j, int x2, int y2, int m, int n) {
visited[i][j] = true;
if (i == x2 && j == y2) return 0;
int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
if (i + 1 < m && sts[i + 1][j] == '.'&&visited[i+1][j]== false) {
sum1 = 1 + DFS(i + 1, j, x2, y2, m, n);
}
if (j + 1 < n && sts[i][j + 1] == '.'&&visited[i][j+1]== false) {
sum2 = 1 + DFS(i, j + 1, x2, y2, m, n);
}
if (i - 1 >= 0 && sts[i - 1][j] == '.'&&visited[i-1][j]== false) {
sum3 = 1 + DFS(i - 1, j, x2, y2, m, n);
}
if (j - 1 >= 0 && sts[i][j - 1] == '.'&&visited[i][j-1]== false) {
sum4 = 1 + DFS(i, j - 1, x2, y2, m, n);
}
return minValue4(sum1,sum2,sum3,sum4);
// return min(min(sum1,sum2),min(sum3,sum4));
}
int minValue4(int sum1,int sum2,int sum3,int sum4){
if(sum1==0){
return minValue3(sum2,sum3,sum4);
}else if(sum2==0){
return minValue3(sum1,sum3,sum4);
}else if(sum3 ==0){
return minValue3(sum1,sum2,sum4);
}else if(sum4==0){
return minValue3(sum1,sum2,sum3);
}else{
return min(min(sum1,sum2),min(sum3,sum4));
}
}
int minValue3(int sum1,int sum2,int sum3){
if(sum1==0){
return minValue2(sum2,sum3);
}else if(sum2==0){
return minValue2(sum1,sum3);
}else if(sum3==0){
return minValue2(sum1,sum2);
}else{
return min(sum1,min(sum2,sum3));
}
}
int minValue2(int sum1,int sum2){
if(sum1==0){
return sum2;
}else{
return sum1;
}
}