import sys
import heapq
n, m = map(int, input().split())
xs, ys, xt, yt = map(int, input().split())
g = [['*'] for _ in range(n + 1)] # 索引0不使用
for i in range(1, n + 1):
g[i] += input()
g[i] += '*'
g[0] = ['*'] * (m + 2)
g.append(['*'] * (m + 2))
if g[xs][ys] == '*' or g[xt][yt] == '*':
print(-1)
sys.exit()
current = [(0,(xs,ys))]
already = {(xs,ys)}
while current:
dist,node = heapq.heappop(current)
if node == (xt,yt):
print(dist)
sys.exit()
x,y = node
around = {(x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)} # 上下左右
for x0,y0 in around:
if g[x0][y0] == '.' and (x0,y0) not in already:
already.add((x0,y0))
heapq.heappush(current,(dist+1,(x0, y0)))
print(-1)