// In the name of Allah.
// "And He is with you wherever you are"..
//#include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <string>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <iomanip>
#include <assert.h>
#include <vector>
#include <cstring>
#include <map>
#include <deque>
#include <queue>
#include <stack>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <set>
#include <complex>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <climits>
#include <cctype>
#include <bitset>
#include <numeric>
#include <array>
#include <tuple>
#include <stdexcept>
#include <utility>
#include <functional>
#include <locale>
#define mp make_pair
#define pb push_back
#define IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define sz size()
#define vi vector<int>
#define vll vector<ll>
#define vs vector<string>
#define all(v) ((v).begin()), ((v).end())
#define mms(Arr, Value) memset(Arr, Value, sizeof(Arr))
#define vpii vector<pair<int, int> >
#define vpll vector<pair<ll, ll> >
#define pll pair<ll, ll>
#define pii pair<int,int>
#define re return
#define fri(x,n) for(int i = x ; i < n ; ++i)
#define frj(x,n) for(int j = x ; j < n ; ++j)
#define MAX(a,b,c) max(a,max(b,c))
#define ld long double
typedef long long int ll;
const int oo = INT_MAX;
const ll OO = 1e18;
using namespace std;
ll GCD(ll a, ll b) { return((!b) ? a : GCD(b, a % b)); }
ll LCM(ll a, ll b) { return a / (GCD(a, b)) * b; }
bool isPrime(ll n) {
if (n == 2)re 1;
if (n < 2 || n % 2 == 0)re 0;
for (ll i = 3; i * i <= n; i += 2)
if (n % i == 0)re 0;
re 1;
}
ll mod = 1000000000 + 7;
int arr[1003][1003]; // if 1 then it is road
deque<pii> q;
int x[] = { -1 ,1, 0, 0, -2, 2, 0, 0, -1, -2, -1, -2, 1, 2, 1, 2, -1, -1,-2,-2,1,1,2,2 };
int y[] = { 0,0,-1,1,0,0,2,-2,-1,-1,-2,-2,-1,-1,-2,-2,1,2,1,2,1,2,1,2 };
map<pii, int> dist;
int r, c, sr, sc, er, ec;
bool ok(int rr, int cc) {
if (rr < 0 || rr >= r || cc < 0 || cc >= c)
re false;
re true;
}
int main() {
IO;
/*freopen("gift1.in", "r", stdin);
freopen("gift1.out", "w", stdout);*/
cin >> r >> c >> sr >> sc >> er >> ec;
sr--; sc--; er--; ec--;
fri(0, r) {
frj(0, c) {
char ch;
cin >> ch;
if (ch == '.')
arr[i][j] = 1;
dist[mp(i, j)] = oo;
}
}
q.push_front(mp(sr, sc));
dist[mp(sr, sc)] = 0;
while (!q.empty()) {
pii p = q.front();
q.pop_front();
fri(0, 4) {
int nx = p.first + x[i];
int ny = p.second + y[i];
if (dist[p] < dist[mp(nx, ny)] && ok(nx, ny) && arr[nx][ny]) {
q.push_front(mp(nx, ny));
dist[mp(nx, ny)] = dist[p];
}
}
fri(4, 24) {
int nx = p.first + x[i];
int ny = p.second + y[i];
if (dist[p] + 1 < dist[mp(nx, ny)] && ok(nx, ny) && arr[nx][ny]) {
q.push_back(mp(nx, ny));
dist[mp(nx, ny)] = dist[p] + 1;
}
}
}
if (dist[mp(er, ec)] == oo)
cout << -1;
else
cout << dist[mp(er, ec)];
re 0;
}
Ly8gSW4gdGhlIG5hbWUgb2YgQWxsYWguCi8vICJBbmQgSGUgaXMgd2l0aCB5b3Ugd2hlcmV2ZXIgeW91IGFyZSIuLgoKCi8vI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDxhc3NlcnQuaD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxkZXF1ZT4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8Y29tcGxleD4KI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDxjY3R5cGU+CiNpbmNsdWRlIDxiaXRzZXQ+CiNpbmNsdWRlIDxudW1lcmljPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDx0dXBsZT4KI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgojaW5jbHVkZSA8bG9jYWxlPgojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIElPIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CWNpbi50aWUoMCk7CWNvdXQudGllKDApOwojZGVmaW5lIHN6IHNpemUoKQojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgdmxsIHZlY3RvcjxsbD4KI2RlZmluZSB2cyB2ZWN0b3I8c3RyaW5nPgojZGVmaW5lIGFsbCh2KSAoKHYpLmJlZ2luKCkpLCAoKHYpLmVuZCgpKQojZGVmaW5lIG1tcyhBcnIsIFZhbHVlKSBtZW1zZXQoQXJyLCBWYWx1ZSwgc2l6ZW9mKEFycikpCiNkZWZpbmUgdnBpaSB2ZWN0b3I8cGFpcjxpbnQsIGludD4gPgojZGVmaW5lIHZwbGwgdmVjdG9yPHBhaXI8bGwsIGxsPiA+CiNkZWZpbmUgcGxsIHBhaXI8bGwsIGxsPgojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgcmUgcmV0dXJuCiNkZWZpbmUgZnJpKHgsbikJZm9yKGludCBpID0geCA7IGkgPCBuIDsgKytpKQojZGVmaW5lIGZyaih4LG4pCWZvcihpbnQgaiA9IHggOyBqIDwgbiA7ICsraikKI2RlZmluZSBNQVgoYSxiLGMpIG1heChhLG1heChiLGMpKQojZGVmaW5lIGxkIGxvbmcgZG91YmxlCnR5cGVkZWYgbG9uZyBsb25nIGludCBsbDsKCmNvbnN0IGludCBvbyA9IElOVF9NQVg7CmNvbnN0IGxsIE9PID0gMWUxODsKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpsbCBHQ0QobGwgYSwgbGwgYikgeyByZXR1cm4oKCFiKSA/IGEgOiBHQ0QoYiwgYSAlIGIpKTsgfQpsbCBMQ00obGwgYSwgbGwgYikgeyByZXR1cm4gYSAvIChHQ0QoYSwgYikpICogYjsgfQpib29sIGlzUHJpbWUobGwgbikgewoJaWYgKG4gPT0gMilyZSAxOwoJaWYgKG4gPCAyIHx8IG4gJSAyID09IDApcmUgMDsKCWZvciAobGwgaSA9IDM7IGkgKiBpIDw9IG47IGkgKz0gMikKCQlpZiAobiAlIGkgPT0gMClyZSAwOwoJcmUgMTsKfQoKbGwgbW9kID0gMTAwMDAwMDAwMCArIDc7CgppbnQgYXJyWzEwMDNdWzEwMDNdOyAgICAgLy8gaWYgMSB0aGVuIGl0IGlzIHJvYWQKZGVxdWU8cGlpPiBxOwppbnQgeFtdID0geyAtMSAgLDEsIDAsIDAsIC0yLCAyLCAwLCAwLCAtMSwgLTIsIC0xLCAtMiwgMSwgMiwgMSwgMiwgLTEsIC0xLC0yLC0yLDEsMSwyLDIgfTsKaW50IHlbXSA9IHsgMCwwLC0xLDEsMCwwLDIsLTIsLTEsLTEsLTIsLTIsLTEsLTEsLTIsLTIsMSwyLDEsMiwxLDIsMSwyIH07Cm1hcDxwaWksIGludD4gZGlzdDsKCmludCByLCBjLCBzciwgc2MsIGVyLCBlYzsKCmJvb2wgb2soaW50IHJyLCBpbnQgY2MpIHsKCglpZiAocnIgPCAwIHx8IHJyID49IHIgfHwgY2MgPCAwIHx8IGNjID49IGMpCgkJcmUgZmFsc2U7CglyZSB0cnVlOwp9CgppbnQgbWFpbigpIHsKCglJTzsKCS8qZnJlb3BlbigiZ2lmdDEuaW4iLCAiciIsIHN0ZGluKTsKCWZyZW9wZW4oImdpZnQxLm91dCIsICJ3Iiwgc3Rkb3V0KTsqLwoKCWNpbiA+PiByID4+IGMgPj4gc3IgPj4gc2MgPj4gZXIgPj4gZWM7Cglzci0tOyBzYy0tOyBlci0tOyBlYy0tOwoKCWZyaSgwLCByKSB7CgkJZnJqKDAsIGMpIHsKCQkJY2hhciBjaDsKCQkJY2luID4+IGNoOwoJCQlpZiAoY2ggPT0gJy4nKQoJCQkJYXJyW2ldW2pdID0gMTsKCQkJZGlzdFttcChpLCBqKV0gPSBvbzsKCQl9Cgl9CgoJcS5wdXNoX2Zyb250KG1wKHNyLCBzYykpOwoJZGlzdFttcChzciwgc2MpXSA9IDA7CgoJd2hpbGUgKCFxLmVtcHR5KCkpIHsKCQlwaWkgcCA9IHEuZnJvbnQoKTsKCQlxLnBvcF9mcm9udCgpOwoJCWZyaSgwLCA0KSB7CgkJCWludCBueCA9IHAuZmlyc3QgKyB4W2ldOwoJCQlpbnQgbnkgPSBwLnNlY29uZCArIHlbaV07CgkJCWlmIChkaXN0W3BdIDwgZGlzdFttcChueCwgbnkpXSAmJiBvayhueCwgbnkpICYmIGFycltueF1bbnldKSB7CgkJCQlxLnB1c2hfZnJvbnQobXAobngsIG55KSk7CgkJCQlkaXN0W21wKG54LCBueSldID0gZGlzdFtwXTsKCQkJfQoJCX0KCgoJCWZyaSg0LCAyNCkgewoJCQlpbnQgbnggPSBwLmZpcnN0ICsgeFtpXTsKCQkJaW50IG55ID0gcC5zZWNvbmQgKyB5W2ldOwoJCQlpZiAoZGlzdFtwXSArIDEgPCBkaXN0W21wKG54LCBueSldICYmIG9rKG54LCBueSkgJiYgYXJyW254XVtueV0pIHsKCQkJCXEucHVzaF9iYWNrKG1wKG54LCBueSkpOwoJCQkJZGlzdFttcChueCwgbnkpXSA9IGRpc3RbcF0gKyAxOwoJCQl9CgkJfQoJCQoJfQoKCWlmIChkaXN0W21wKGVyLCBlYyldID09IG9vKQoJCWNvdXQgPDwgLTE7CgllbHNlCgkJY291dCA8PCBkaXN0W21wKGVyLCBlYyldOwoKCXJlIDA7Cn0KCgo=