#include using namespace std; using i64 = int64_t; using vi = vector; using vvi = vector; int main() { int h, w; cin >> h >> w; vvi b(h, vi(w)); int sx, sy, gx, gy; for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { char c; cin >> c; if (c == 'S') { sx = i, sy = j; } else if (c == 'G') { gx = i, gy = j; } else if (c == 'R') { b[i][j] = 1; } } } using ii = pair; using iii = pair; vvi nowk(h, vi(w, 1e18)), nowb(h, vi(w, 1e18)); queue que; que.push(iii(ii(sx, sy), 0)); nowk[sx][sy] = 0; int dxk[] = {1, 2, 2, 1, -1, -2, -2, -1}; int dyk[] = {2, 1, -1, -2, -2, -1, 1, 2}; int dxb[] = {1, 1, -1, -1}; int dyb[] = {-1, 1, -1, 1}; auto ok = [&](int i, int j) { return 0 <= i && i < h && 0 <= j && j < w; }; while (que.size()) { iii t = que.front(); int x = t.first.first; int y = t.first.second; que.pop(); if (t.second == 0) { for (int i = 0; i < 8; i++) { int xx = x + dxk[i]; int yy = y + dyk[i]; if (ok(xx, yy)) { if (b[xx][yy]) { if (t.second == 0) { int p = nowk[x][y] + 1; if (p < nowb[xx][yy]) { nowb[xx][yy] = p; que.push(iii(ii(xx, yy), 1)); } } else { int p = nowb[x][y] + 1; if (p < nowk[xx][yy]) { nowk[xx][yy] = p; que.push(iii(ii(xx, yy), 0)); } } } else { if (t.second == 0) { int p = nowk[x][y] + 1; if (p < nowk[xx][yy]) { nowk[xx][yy] = p; que.push(iii(ii(xx, yy), 0)); } } else { int p = nowb[x][y] + 1; if (p < nowb[xx][yy]) { nowb[xx][yy] = p; que.push(iii(ii(xx, yy), 1)); } } } } } } else { for (int i = 0; i < 4; i++) { int xx = x + dxb[i]; int yy = y + dyb[i]; if (ok(xx, yy)) { if (b[xx][yy]) { if (t.second == 0) { int p = nowk[x][y] + 1; if (p < nowb[xx][yy]) { nowb[xx][yy] = p; que.push(iii(ii(xx, yy), 1)); } } else { int p = nowb[x][y] + 1; if (p < nowk[xx][yy]) { nowk[xx][yy] = p; que.push(iii(ii(xx, yy), 0)); } } } else { if (t.second == 0) { int p = nowk[x][y] + 1; if (p < nowk[xx][yy]) { nowk[xx][yy] = p; que.push(iii(ii(xx, yy), 0)); } } else { int p = nowb[x][y] + 1; if (p < nowb[xx][yy]) { nowb[xx][yy] = p; que.push(iii(ii(xx, yy), 1)); } } } } } } } i64 k = min(nowk[gx][gy], nowb[gx][gy]); cout << (k == 1e18 ? -1 : k) << endl; }