#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define ii pair<int, int>
#define fi first
#define se second
using namespace std;
const int maxn = 1e3;
const int dx[] = {0, -1, 0, 1};
const int dy[] = {-1, 0, 1, 0};
int n, m, dist[maxn + 10][maxn + 10], xs, ys, xt, yt;
ii dir[maxn + 10][maxn + 10][4];
bool vis[maxn + 10][maxn + 10];
char a[maxn + 10][maxn + 10];
deque<ii> dq;
bool in_matrix(int x, int y)
{
return x >= 1 && x <= n && y >= 1 && y <= m;
}
void bfs01(int xs, int ys)
{
memset(dist, -1, sizeof dist);
dq.push_back({xs, ys});
dist[xs][ys] = 0;
while (dq.size())
{
ii t = dq.front();
dq.pop_front();
int x = t.fi;
int y = t.se;
if (vis[x][y])
continue;
// cout << x << ' ' << y << ' ' << dist[x][y], el;
vis[x][y] = 1;
for (int k = 0; k < 4; k++)
{
int nx = x + dx[k];
int ny = y + dy[k];
if (!in_matrix(nx, ny))
continue;
if (a[nx][ny] != '.' && (dist[nx][ny] == -1 || dist[nx][ny] > dist[x][y]))
{
dist[nx][ny] = dist[x][y];
dq.push_front({nx, ny});
}
ii nt = dir[x + dx[k]][y + dy[k]][k];
nx = nt.fi;
ny = nt.se;
if (!in_matrix(nx, ny))
continue;
// cout << x << ' ' << y << ' ' << nx << ' ' << ny, el;
if (dist[nx][ny] == -1 || dist[nx][ny] > dist[x][y] + 1)
{
dist[nx][ny] = dist[x][y] + 1;
dq.push_back({nx, ny});
}
}
}
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("SHORTEST.INP", "r"))
{
freopen("SHORTEST.INP", "r", stdin);
freopen("SHORTEST.OUT", "w", stdout);
}
cin >> n >> m;
for (int i = 0; i <= n; i++)
for (int j = 0; j <= m; j++)
for (int k = 0; k < 4; k++)
dir[i][j][k] = {-1, -1};
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
cin >> a[i][j];
if (a[i][j] == 'S')
xs = i, ys = j;
else if (a[i][j] == 'T')
xt = i, yt = j;
if (a[i][j] == '#')
for (int k = 0; k < 4; k++)
dir[i][j][k] = {i, j};
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
dir[i][j][0] = max(dir[i][j][0], dir[i][j - 1][0]);
dir[i][j][1] = max(dir[i][j][1], dir[i - 1][j][1]);
}
for (int i = n; i >= 1; i--)
for (int j = m; j >= 1; j--)
{
if (dir[i][j][2].fi == -1)
dir[i][j][2] = dir[i][j + 1][2];
if (dir[i][j][3].fi == -1)
dir[i][j][3] = dir[i + 1][j][3];
}
// for (int k = 0; k < 4; k++)
// {
// for (int i = 1; i <= n; i++)
// {
// for (int j = 1; j <= m; j++)
// cout << "( " << dir[i][j][k].fi << ' ' << dir[i][j][k].se << " ) ";
// el;
// }
// el;
// }
bfs01(xs, ys);
cout << dist[xt][yt];
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgbWF4biA9IDFlMzsKY29uc3QgaW50IGR4W10gPSB7MCwgLTEsIDAsIDF9Owpjb25zdCBpbnQgZHlbXSA9IHstMSwgMCwgMSwgMH07CgppbnQgbiwgbSwgZGlzdFttYXhuICsgMTBdW21heG4gKyAxMF0sIHhzLCB5cywgeHQsIHl0OwppaSBkaXJbbWF4biArIDEwXVttYXhuICsgMTBdWzRdOwpib29sIHZpc1ttYXhuICsgMTBdW21heG4gKyAxMF07CmNoYXIgYVttYXhuICsgMTBdW21heG4gKyAxMF07CmRlcXVlPGlpPiBkcTsKCmJvb2wgaW5fbWF0cml4KGludCB4LCBpbnQgeSkKewogICAgcmV0dXJuIHggPj0gMSAmJiB4IDw9IG4gJiYgeSA+PSAxICYmIHkgPD0gbTsKfQp2b2lkIGJmczAxKGludCB4cywgaW50IHlzKQp7CiAgICBtZW1zZXQoZGlzdCwgLTEsIHNpemVvZiBkaXN0KTsKICAgIGRxLnB1c2hfYmFjayh7eHMsIHlzfSk7CiAgICBkaXN0W3hzXVt5c10gPSAwOwoKICAgIHdoaWxlIChkcS5zaXplKCkpCiAgICB7CiAgICAgICAgaWkgdCA9IGRxLmZyb250KCk7CiAgICAgICAgZHEucG9wX2Zyb250KCk7CiAgICAgICAgaW50IHggPSB0LmZpOwogICAgICAgIGludCB5ID0gdC5zZTsKCiAgICAgICAgaWYgKHZpc1t4XVt5XSkKICAgICAgICAgICAgY29udGludWU7Ci8vICAgICAgICBjb3V0IDw8IHggPDwgJyAnIDw8IHkgPDwgJyAnIDw8IGRpc3RbeF1beV0sIGVsOwogICAgICAgIHZpc1t4XVt5XSA9IDE7CiAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA0OyBrKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgbnggPSB4ICsgZHhba107CiAgICAgICAgICAgIGludCBueSA9IHkgKyBkeVtrXTsKCiAgICAgICAgICAgIGlmICghaW5fbWF0cml4KG54LCBueSkpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGFbbnhdW255XSAhPSAnLicgJiYgKGRpc3RbbnhdW255XSA9PSAtMSB8fCBkaXN0W254XVtueV0gPiBkaXN0W3hdW3ldKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGlzdFtueF1bbnldID0gZGlzdFt4XVt5XTsKICAgICAgICAgICAgICAgIGRxLnB1c2hfZnJvbnQoe254LCBueX0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlpIG50ID0gZGlyW3ggKyBkeFtrXV1beSArIGR5W2tdXVtrXTsKICAgICAgICAgICAgbnggPSBudC5maTsKICAgICAgICAgICAgbnkgPSBudC5zZTsKICAgICAgICAgICAgaWYgKCFpbl9tYXRyaXgobngsIG55KSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwovLyAgICAgICAgICAgIGNvdXQgPDwgeCA8PCAnICcgPDwgeSA8PCAnICcgPDwgbnggPDwgJyAnIDw8IG55LCBlbDsKICAgICAgICAgICAgaWYgKGRpc3RbbnhdW255XSA9PSAtMSB8fCBkaXN0W254XVtueV0gPiBkaXN0W3hdW3ldICsgMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGlzdFtueF1bbnldID0gZGlzdFt4XVt5XSArIDE7CiAgICAgICAgICAgICAgICBkcS5wdXNoX2JhY2soe254LCBueX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKCJTSE9SVEVTVC5JTlAiLCAiciIpKQogICAgewogICAgICAgIGZyZW9wZW4oIlNIT1JURVNULklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIlNIT1JURVNULk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4gPj4gbiA+PiBtOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKQogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IG07IGorKykKICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA0OyBrKyspCiAgICAgICAgICAgICAgICBkaXJbaV1bal1ba10gPSB7LTEsIC0xfTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBtOyBqKyspCiAgICAgICAgewogICAgICAgICAgICBjaW4gPj4gYVtpXVtqXTsKICAgICAgICAgICAgaWYgKGFbaV1bal0gPT0gJ1MnKQogICAgICAgICAgICAgICAgeHMgPSBpLCB5cyA9IGo7CiAgICAgICAgICAgIGVsc2UgaWYgKGFbaV1bal0gPT0gJ1QnKQogICAgICAgICAgICAgICAgeHQgPSBpLCB5dCA9IGo7CiAgICAgICAgICAgIGlmIChhW2ldW2pdID09ICcjJykKICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNDsgaysrKQogICAgICAgICAgICAgICAgICAgIGRpcltpXVtqXVtrXSA9IHtpLCBqfTsKICAgICAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgZGlyW2ldW2pdWzBdID0gbWF4KGRpcltpXVtqXVswXSwgZGlyW2ldW2ogLSAxXVswXSk7CiAgICAgICAgICAgIGRpcltpXVtqXVsxXSA9IG1heChkaXJbaV1bal1bMV0sIGRpcltpIC0gMV1bal1bMV0pOwogICAgICAgIH0KICAgIGZvciAoaW50IGkgPSBuOyBpID49IDE7IGktLSkKICAgICAgICBmb3IgKGludCBqID0gbTsgaiA+PSAxOyBqLS0pCiAgICAgICAgewogICAgICAgICAgICBpZiAoZGlyW2ldW2pdWzJdLmZpID09IC0xKQogICAgICAgICAgICAgICAgZGlyW2ldW2pdWzJdID0gZGlyW2ldW2ogKyAxXVsyXTsKICAgICAgICAgICAgaWYgKGRpcltpXVtqXVszXS5maSA9PSAtMSkKICAgICAgICAgICAgICAgIGRpcltpXVtqXVszXSA9IGRpcltpICsgMV1bal1bM107CiAgICAgICAgfQovLyAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7IGsrKykKLy8gICAgewovLyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQovLyAgICAgICAgewovLyAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG07IGorKykKLy8gICAgICAgICAgICAgICAgY291dCA8PCAiKCAiIDw8IGRpcltpXVtqXVtrXS5maSA8PCAnICcgPDwgZGlyW2ldW2pdW2tdLnNlIDw8ICIgKSAiOwovLyAgICAgICAgICAgIGVsOwovLyAgICAgICAgfQovLyAgICAgICAgZWw7Ci8vICAgIH0KICAgIGJmczAxKHhzLCB5cyk7CiAgICBjb3V0IDw8IGRpc3RbeHRdW3l0XTsKfQo=