def nin(): return list(map(int,input().split())) import collections import random h,w=nin() s=[list(input()) for i in range(h)] #h=w=2*10**3 #s=[["#" for _ in range(h)] for _ in range(h)] #s[0][0]="S" #azs[-1][-1]="G" hh=2*h-1 ww=2*w-1 ss=gg=-1 black=set() dij=[1,-1,ww+2,-(ww+2)] dij2=[2*i for i in dij] di2=[2*(ww+2),2*(-(ww+2))] dj2=[2,-2] d=[-1]*((hh+2)*(ww+2)) for i in range(h): for j in range(w): if s[i][j]=="S": ss=2*i*(ww+2)+2*j s[i][j]="." elif s[i][j]=="G": gg=2*i*(ww+2)+2*j s[i][j]="." elif s[i][j]=="#": d[2*i*(ww+2)+2*j]=-2 for i in [hh,hh+1]: for j in range(ww+2): d[i*(ww+2)+j]=-2 for i in range(hh+2): for j in [ww,ww+1]: d[i*(ww+2)+j]=-2 task=collections.deque() task.append(ss) d[ss]=0 ww2=ww+2 while len(task)>0: i=task.popleft() ii,jj=i//ww2,i%ww2 rin=[] for D in dij: if d[i+D]!=-2: rin.append(i+D) if ii%2==jj%2==0: for D in dij2: if d[i+D]!=-2: rin.append(i+D) if ii%2==0 and jj%2==1: for D in di2: if d[i+D]!=-2: rin.append(i+D) if ii%2==1 and jj%2==0: for D in dj2: if d[i+D]!=-2: rin.append(i+D) for j in rin: if d[j]==-1: d[j]=d[i]+1 if j==gg: print(d[j]) exit() task.append(j)