#include #include int main() { int H, W, maxH = 0, maxW = 0; std::cin >> H >> W; std::vector> C(H, std::vector(W)); for (auto& l : C) for (char& c : l) std::cin >> c; C.back().back() = '.'; for (int w = 1; w < W; ++w) { if (C.front()[w - 1] == 'S' && C.front()[w] == '.') { if (w > maxW) maxW = w; C.front()[w] = 'S'; } } for (int h = 1; h < H; ++h) { if (C[h - 1].front() == 'S' && C[h].front() == '.') { if (h > maxH) maxH = h; C[h].front() = 'S'; } for (int w = 1; w < W; ++w) { if ((C[h][w - 1] == 'S' || C[h - 1][w] == 'S') && C[h][w] == '.') { if (w > maxW) maxW = w; if (h > maxH) maxH = h; C[h][w] = 'S'; } } } if (C.back().back() == 'S') { std::cout << H + W - 2 << '\n'; return 0; } maxH += 2; maxW += 2; if (W <= maxW || H <= maxH) { std::cout << H + W - 1 << '\n'; return 0; } C.back().back() = 'G'; for (int w = W - 1; w-- > 0;) { if (C.back()[w + 1] == 'G' && C.back()[w] == '.') { if (w < maxW) { std::cout << H + W - 1 << '\n'; return 0; } C.back()[w] = 'G'; } } for (int h = H - 1; h-- > 0;) { if (C[h + 1].back() == 'G' && C[h].back() == '.') { if (h < maxH) { std::cout << H + W - 1 << '\n'; return 0; } C[h].back() = 'G'; } for (int w = W - 1; w-- > 0;) { if ((C[h][w + 1] == 'G' || C[h + 1][w] == 'G') && C[h][w] == '.') { if (h < maxH || w < maxW) { std::cout << H + W - 1 << '\n'; return 0; } C[h][w] = 'G'; } } } std::cout << H + W << '\n'; return 0; }