from collections import deque from bisect import bisect_left H,W=map(int,input().split()) sx,sy=map(int,input().split()) gx,gy=map(int,input().split()) S=["#"*(W+2) for i in range(H+2)] for i in range(H): S[i+1]="#"+input()+"#" S=[list(s) for s in S] S[sx][sy]="." S[gx][gy]="." H+=2 W+=2 num=[[0]*W for i in range(H)] for i in range(1,H-1): for j in range(1,W-1): if S[i-1][j]=="." or S[i+1][j]==".": num[i][j]^=1 if S[i][j-1]=="." or S[i][j+1]==".": num[i][j]^=2 dist=[[[[1<<60]*4 for i in range(2000)] for i in range(W)] for i in range(H)] dist[sx][sy][0][num[sx][sy]]=0 vert=deque() vert.append((0,sx,sy,0,num[sx][sy])) while vert: d,x,y,r,b=vert.popleft() if dist[x][y][r][b]!=d: continue if S[x+1][y]==".": if dist[x+1][y][r][b|num[x+1][y]]>d+1: dist[x+1][y][r][b|num[x+1][y]]=d+1 vert.append((d+1,x+1,y,r,b|num[x+1][y])) if S[x-1][y]==".": if dist[x-1][y][r][b|num[x-1][y]]>d: dist[x-1][y][r][b|num[x-1][y]]=d vert.appendleft((d,x-1,y,r,b|num[x-1][y])) if S[x][y+1]==".": if r!=1999 and dist[x][y+1][r+1][b|num[x][y+1]]>d: dist[x][y+1][r+1][b|num[x][y+1]]=d vert.appendleft((d,x,y+1,r+1,b|num[x][y+1])) if S[x][y-1]==".": if dist[x][y-1][r][b|num[x][y-1]]>d: dist[x][y-1][r][b|num[x][y-1]]=d vert.appendleft((d,x,y-1,r,b|num[x][y-1])) swx=gx-sx swy=gy-sy X=50000 primes=[1]*X primes[0]=0 primes[1]=0 for i in range(2,X): if primes[i]==0: continue for j in range(i*2,X,i): primes[j]=0 px=[] py=[] for i in range(X): if 0<=i-swx=(1<<60): print(-1) else: print(ans)