#include <stdio.h>
#include <vector>
#include <queue>
#include <algorithm>
const int INF = (int)1e9;
struct Solver {
int nRows;
int nCols;
int map[128][128];
Solver(int nRows = 0, int nCols = 0) : nRows(nRows), nCols(nCols) {
for (int r = 0; r < nRows; ++r) {
map[r][0] = map[r][nCols-1] = INF;
}
for (int c = 0; c < nCols; ++c) {
map[0][c] = map[nRows-1][c] = INF;
}
for (int r = 1; r <= nRows-2; ++r) {
for (int c = 1; c <= nCols-2; ++c) {
map[r][c] = 0;
}
}
}
bool isset_path() {
std::queue<std::pair<int, int>> q;
std::vector<std::pair<int, int>> s;
q.push({1, 1});
map[1][1] = 1;
while (!q.empty()) {
auto curr = q.front(); q.pop(); s.push_back(curr);
int r = curr.first, c = curr.second;
if (map[r+1][c] == 0) {
map[r+1][c] = 1;
q.push({r+1, c});
}
if (map[r-1][c] == 0) {
map[r-1][c] = 1;
q.push({r-1, c});
}
if (map[r][c+1] == 0) {
map[r][c+1] = 1;
q.push({r, c+1});
}
if (map[r][c-1] == 0) {
map[r][c-1] = 1;
q.push({r, c-1});
}
}
bool result = map[nRows-2][nCols-2];
backup();
return result;
}
void backup() {
for (int r = 0; r < nRows; ++r) {
for (int c = 0; c < nCols; ++c) {
map[r][c] = (map[r][c] == INF) ? INF : 0;
}
}
}
int count() {
if (!isset_path()) {
return -1;
}
int r = 1, c = 1, dir = 0, answ = 0;
const int dr[4] = { 1, 0, -1, 0};
const int dc[4] = { 0, 1, 0, -1};
do {
map[r][c]++;
int min = std::min({map[r-1][c], map[r+1][c], map[r][c+1], map[r][c-1]});
if (map[r+dr[dir]][c+dc[dir]] != min) {
for (int next = 0; next < 4; ++next) {
if (map[r+dr[next]][c+dc[next]] == min) {
dir = next;
break;
}
}
}
++answ;
r += dr[dir];
c += dc[dir];
} while (!(r == nRows-2 && c == nCols-2));
backup();
return answ;
}
static Solver read() {
int nRows, nCols;
scanf("%d %d\n", &nRows, &nCols);
Solver solver(nRows, nCols);
for (int r = 0; r < nRows; ++r) {
char buf[101];
scanf("%[^\n]s", buf); scanf("\n");
for (int c = 0; c < nCols; ++c) {
solver.map[r][c] = (buf[c] == '@') ? INF : 0;
}
}
return solver;
}
};
int main() {
//freopen("input.txt", "rt", stdin);
auto solver = Solver::read();
printf("%d", solver.count());
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KIApjb25zdCBpbnQgSU5GID0gKGludCkxZTk7CiAKc3RydWN0IFNvbHZlciB7CiAgICBpbnQgblJvd3M7CiAgICBpbnQgbkNvbHM7CiAgICBpbnQgbWFwWzEyOF1bMTI4XTsKICAgICAKICAgIFNvbHZlcihpbnQgblJvd3MgPSAwLCBpbnQgbkNvbHMgPSAwKSA6IG5Sb3dzKG5Sb3dzKSwgbkNvbHMobkNvbHMpIHsgCiAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBuUm93czsgKytyKSB7CiAgICAgICAgICAgIG1hcFtyXVswXSA9IG1hcFtyXVtuQ29scy0xXSA9IElORjsKICAgICAgICB9CiAgICAgICAgIAogICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgbkNvbHM7ICsrYykgewogICAgICAgICAgICBtYXBbMF1bY10gPSBtYXBbblJvd3MtMV1bY10gPSBJTkY7CiAgICAgICAgfQogICAgICAgICAKICAgICAgICBmb3IgKGludCByID0gMTsgciA8PSBuUm93cy0yOyArK3IpIHsKICAgICAgICAgICAgZm9yIChpbnQgYyA9IDE7IGMgPD0gbkNvbHMtMjsgKytjKSB7CiAgICAgICAgICAgICAgICBtYXBbcl1bY10gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSAgICAKICAgICAKICAgIGJvb2wgaXNzZXRfcGF0aCgpIHsKICAgICAgICBzdGQ6OnF1ZXVlPHN0ZDo6cGFpcjxpbnQsIGludD4+IHE7CiAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGludCwgaW50Pj4gczsKICAgICAgICBxLnB1c2goezEsIDF9KTsKICAgICAgICBtYXBbMV1bMV0gPSAxOwogICAgICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgICAgIGF1dG8gY3VyciA9IHEuZnJvbnQoKTsgcS5wb3AoKTsgcy5wdXNoX2JhY2soY3Vycik7CiAgICAgICAgICAgIGludCByID0gY3Vyci5maXJzdCwgYyA9IGN1cnIuc2Vjb25kOwogICAgICAgICAgICBpZiAobWFwW3IrMV1bY10gPT0gMCkgewogICAgICAgICAgICAgICAgbWFwW3IrMV1bY10gPSAxOwogICAgICAgICAgICAgICAgcS5wdXNoKHtyKzEsIGN9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobWFwW3ItMV1bY10gPT0gMCkgewogICAgICAgICAgICAgICAgbWFwW3ItMV1bY10gPSAxOwogICAgICAgICAgICAgICAgcS5wdXNoKHtyLTEsIGN9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobWFwW3JdW2MrMV0gPT0gMCkgewogICAgICAgICAgICAgICAgbWFwW3JdW2MrMV0gPSAxOwogICAgICAgICAgICAgICAgcS5wdXNoKHtyLCBjKzF9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobWFwW3JdW2MtMV0gPT0gMCkgewogICAgICAgICAgICAgICAgbWFwW3JdW2MtMV0gPSAxOwogICAgICAgICAgICAgICAgcS5wdXNoKHtyLCBjLTF9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBib29sIHJlc3VsdCA9IG1hcFtuUm93cy0yXVtuQ29scy0yXTsKICAgICAgICBiYWNrdXAoKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgIAogICAgdm9pZCBiYWNrdXAoKSB7CiAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBuUm93czsgKytyKSB7CiAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgbkNvbHM7ICsrYykgewogICAgICAgICAgICAgICAgbWFwW3JdW2NdID0gKG1hcFtyXVtjXSA9PSBJTkYpID8gSU5GIDogMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICAKICAgIGludCBjb3VudCgpIHsKICAgICAgICBpZiAoIWlzc2V0X3BhdGgoKSkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIGludCByID0gMSwgYyA9IDEsIGRpciA9IDAsIGFuc3cgPSAwOwogICAgICAgIGNvbnN0IGludCBkcls0XSA9IHsgMSwgMCwgLTEsICAwfTsKICAgICAgICBjb25zdCBpbnQgZGNbNF0gPSB7IDAsIDEsICAwLCAtMX07CiAgICAgICAgZG8gewogICAgICAgICAgICBtYXBbcl1bY10rKzsKICAgICAgICAgICAgaW50IG1pbiA9IHN0ZDo6bWluKHttYXBbci0xXVtjXSwgbWFwW3IrMV1bY10sIG1hcFtyXVtjKzFdLCBtYXBbcl1bYy0xXX0pOwogICAgICAgICAgICBpZiAobWFwW3IrZHJbZGlyXV1bYytkY1tkaXJdXSAhPSBtaW4pIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IG5leHQgPSAwOyBuZXh0IDwgNDsgKytuZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFtyK2RyW25leHRdXVtjK2RjW25leHRdXSA9PSBtaW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlyID0gbmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICsrYW5zdzsKICAgICAgICAgICAgciArPSBkcltkaXJdOwogICAgICAgICAgICBjICs9IGRjW2Rpcl07CiAgICAgICAgfSB3aGlsZSAoIShyID09IG5Sb3dzLTIgJiYgYyA9PSBuQ29scy0yKSk7CiAgICAgICAgYmFja3VwKCk7CiAgICAgICAgcmV0dXJuIGFuc3c7CiAgICB9CiAgICAgCiAgICBzdGF0aWMgU29sdmVyIHJlYWQoKSB7CiAgICAgICAgaW50IG5Sb3dzLCBuQ29sczsKICAgICAgICBzY2FuZigiJWQgJWRcbiIsICZuUm93cywgJm5Db2xzKTsKICAgICAgICAgCiAgICAgICAgU29sdmVyIHNvbHZlcihuUm93cywgbkNvbHMpOwogICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgblJvd3M7ICsrcikgewogICAgICAgICAgICBjaGFyIGJ1ZlsxMDFdOwogICAgICAgICAgICBzY2FuZigiJVteXG5dcyIsIGJ1Zik7IHNjYW5mKCJcbiIpOwogICAgICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IG5Db2xzOyArK2MpIHsKICAgICAgICAgICAgICAgIHNvbHZlci5tYXBbcl1bY10gPSAoYnVmW2NdID09ICdAJykgPyBJTkYgOiAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBzb2x2ZXI7CiAgICB9Cn07CiAKaW50IG1haW4oKSB7CiAgICAvL2ZyZW9wZW4oImlucHV0LnR4dCIsICJydCIsIHN0ZGluKTsKICAgIGF1dG8gc29sdmVyID0gU29sdmVyOjpyZWFkKCk7CiAgICBwcmludGYoIiVkIiwgc29sdmVyLmNvdW50KCkpOwogICAgcmV0dXJuIDA7Cn0=