#include <bits/stdc++.h>

using namespace std;

const int N = 1003;

int n, m;

char mat[N][N];

int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};

int dist[N][N];

void bfs(int x, int y) {
	memset(dist, -1, sizeof dist);
	dist[x][y] = 0;
	deque<pair<int, int>> q;
	q.emplace_back(x, y);
	while(!q.empty()) {
		tie(x, y) = q.front(); q.pop_front();
		for(int i = 0; i < 4; i++) {
			int nx = x + dx[i];
			int ny = y + dy[i];
			if(nx < 1 or nx > n) continue;
			if(ny < 1 or ny > m) continue;
			if(mat[nx][ny] != '.') continue;
			if(dist[nx][ny] != -1 and dist[nx][ny] <= dist[x][y]) continue;
			dist[nx][ny] = dist[x][y];
			q.emplace_front(nx, ny);
		}
		for(int i = -2; i <= 2; i++) for(int j = -2; j <= 2; j++) {
			int nx = x + i;
			int ny = y + j;
			if(nx < 1 or nx > n) continue;
			if(ny < 1 or ny > m) continue;
			if(mat[nx][ny] != '.') continue;
			if(dist[nx][ny] != -1) continue;
			dist[nx][ny] = dist[x][y] + 1;
			q.emplace_back(nx, ny);
		}
	}
}

int main() {
	scanf("%d %d", &n, &m);

	int cx, cy;
	scanf("%d %d", &cx, &cy);
	int sx, sy;
	scanf("%d %d", &sx, &sy);

	for(int i = 1; i <= n; i++) scanf(" %s", mat[i] + 1);

	bfs(cx, cy);

	printf("%d\n", dist[sx][sy]);
}
