#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 7;
int n, m;
int dx[] = {1, -1, 0, 0, 1, -1, 1, -1};
int dy[] = {0, 0, 1, -1, 1, -1, -1, 1};
struct node {
int dif, x, y;
bool operator<(const node &other) const {
return dif > other.dif;
}
};
bool ok(int x, int y) {
return x >= 1 && x <= n && y >= 1 && y <= m;
}
vector<vector<int>> dijkstra(int x, int y, vector<vector<char>> a) {
vector<vector<int>> dist(n + 5, vector<int> (m + 5, inf));
dist[x][y] = (a[x][y] == '#' ? 0 : (a[x][y] - '0'));
priority_queue<node> q;
q.push({dist[x][y], x, y});
while (q.size()) {
int x = q.top().x;
int y = q.top().y;
int dif = q.top().dif;
q.pop();
if (dif > dist[x][y]) continue;
for (int d = 0; d < 8; d++) {
int nx = x + dx[d];
int ny = y + dy[d];
if (!ok(nx, ny)) continue;
if (a[nx][ny] == '.') continue;
int add = a[nx][ny] == '#' ? 0 : (a[nx][ny] - '0');
if (dist[nx][ny] > dist[x][y] + add) {
dist[nx][ny] = dist[x][y] + add;
q.push({dist[nx][ny], nx, ny});
}
}
}
return dist;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
vector<vector<char>> a(n + 5, vector<char> (m + 5, 0));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
int ans = inf;
for (int i = 1; i <= m; i++) {
if (a[1][i] == '.') continue;
vector<vector<int>> dist = dijkstra(1, i, a);
for (int j = 2; j <= n; j++) ans = min(ans, dist[j][1]);
for (int j = 1; j <= m; j++) ans = min(ans, dist[n][j]);
}
for (int j = 1; j <= m; j++) {
if (a[n][j] == '.') continue;
vector<vector<int>> dist = dijkstra(n, j, a);
for (int i = 1; i <= n; ++i) ans = min(ans, dist[i][m]);
}
for (int i = 1; i <= n; i++) {
if (a[i][1] == '.') continue;
vector<vector<int>> dist = dijkstra(i, 1, a);
for (int j = 1; j <= n; j++) ans = min(ans, dist[j][m]);
}
cout << ans << '\n';
return 0;
}
/*
break
could
misty
phone
deads
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7IApjb25zdCBpbnQgaW5mID0gMWU5ICsgNzsKaW50IG4sIG07CmludCBkeFtdID0gezEsIC0xLCAwLCAwLCAxLCAtMSwgMSwgLTF9OwppbnQgZHlbXSA9IHswLCAwLCAxLCAtMSwgMSwgLTEsIC0xLCAxfTsKc3RydWN0IG5vZGUgewogICAgaW50IGRpZiwgeCwgeTsKICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG5vZGUgJm90aGVyKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIGRpZiA+IG90aGVyLmRpZjsKICAgIH0KfTsKYm9vbCBvayhpbnQgeCwgaW50IHkpIHsKICAgIHJldHVybiAgeCA+PSAxICYmIHggPD0gbiAmJiB5ID49IDEgJiYgeSA8PSBtOwp9CnZlY3Rvcjx2ZWN0b3I8aW50Pj4gZGlqa3N0cmEoaW50IHgsIGludCB5LCB2ZWN0b3I8dmVjdG9yPGNoYXI+PiBhKSB7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGRpc3QobiArIDUsIHZlY3RvcjxpbnQ+IChtICsgNSwgaW5mKSk7CiAgICBkaXN0W3hdW3ldID0gKGFbeF1beV0gPT0gJyMnID8gMCA6IChhW3hdW3ldIC0gJzAnKSk7CiAgICBwcmlvcml0eV9xdWV1ZTxub2RlPiBxOwogICAgcS5wdXNoKHtkaXN0W3hdW3ldLCB4LCB5fSk7CiAgICB3aGlsZSAocS5zaXplKCkpIHsKICAgICAgICBpbnQgeCA9IHEudG9wKCkueDsKICAgICAgICBpbnQgeSA9IHEudG9wKCkueTsKICAgICAgICBpbnQgZGlmID0gcS50b3AoKS5kaWY7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICBpZiAoZGlmID4gZGlzdFt4XVt5XSkgY29udGludWU7CiAgICAgICAgZm9yIChpbnQgZCA9IDA7IGQgPCA4OyBkKyspIHsKICAgICAgICAgICAgaW50IG54ID0geCArIGR4W2RdOwogICAgICAgICAgICBpbnQgbnkgPSB5ICsgZHlbZF07CiAgICAgICAgICAgIGlmICghb2sobngsIG55KSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChhW254XVtueV0gPT0gJy4nKSBjb250aW51ZTsKICAgICAgICAgICAgaW50IGFkZCA9IGFbbnhdW255XSA9PSAnIycgPyAwIDogKGFbbnhdW255XSAtICcwJyk7CiAgICAgICAgICAgIGlmIChkaXN0W254XVtueV0gPiBkaXN0W3hdW3ldICsgYWRkKSB7CiAgICAgICAgICAgICAgICBkaXN0W254XVtueV0gPSBkaXN0W3hdW3ldICsgYWRkOwogICAgICAgICAgICAgICAgcS5wdXNoKHtkaXN0W254XVtueV0sIG54LCBueX0pOyAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBkaXN0Owp9CmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsKICAgIGNpbiA+PiBuID4+IG07CiAgICB2ZWN0b3I8dmVjdG9yPGNoYXI+PiBhKG4gKyA1LCB2ZWN0b3I8Y2hhcj4gKG0gKyA1LCAwKSk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBtOyBqKyspIHsKICAgICAgICAgICAgY2luID4+IGFbaV1bal07IAogICAgICAgIH0KICAgIH0gCiAgICBpbnQgYW5zID0gaW5mOyAKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewogICAgICAgIGlmIChhWzFdW2ldID09ICcuJykgY29udGludWU7CiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBkaXN0ID0gZGlqa3N0cmEoMSwgaSwgYSk7CiAgICAgICAgZm9yIChpbnQgaiA9IDI7IGogPD0gbjsgaisrKSBhbnMgPSBtaW4oYW5zLCBkaXN0W2pdWzFdKTsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBtOyBqKyspIGFucyA9IG1pbihhbnMsIGRpc3Rbbl1bal0pOwogICAgfQogICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgaisrKSB7CiAgICAgICAgaWYgKGFbbl1bal0gPT0gJy4nKSBjb250aW51ZTsKICAgICAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGRpc3QgPSBkaWprc3RyYShuLCBqLCBhKTsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIGFucyA9IG1pbihhbnMsIGRpc3RbaV1bbV0pOwogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgaWYgKGFbaV1bMV0gPT0gJy4nKSBjb250aW51ZTsKICAgICAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGRpc3QgPSBkaWprc3RyYShpLCAxLCBhKTsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBuOyBqKyspIGFucyA9IG1pbihhbnMsIGRpc3Rbal1bbV0pOwogICAgfQogICAgY291dCA8PCBhbnMgPDwgJ1xuJzsgCiAgICByZXR1cm4gMDsKfQoKLyoKYnJlYWsKY291bGQKbWlzdHkKcGhvbmUKZGVhZHMKKi8g