// ROOT : DRAGON3012009
#include <bits/stdc++.h>
#define ll int
#define ld long double
#define el "\n"
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define __ROOT__ int main()
#pragma GCC optimize("O2")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define fi first
#define se second
#define M 1000000007
#define MAXN 5001
#define INF (1ll<<30)
#define BLOCK_SIZE 425
#define MAX_NODE 1001001
#define LOG 19
#define ALPHA_SIZE 26
#define BASE 256
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
using namespace std;
using namespace chrono ;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
const ll NMOD = 1;
const int dx[] = {0,0,1,1,1,-1,-1,-1};
const int dy[] = {1,-1,0,1,-1,0,-1,1};
//**Variable**//
ll n, m , ans = INF ;
char arr[MAXN][MAXN] ;
ll d[MAXN][MAXN] ;
//**Struct**//
struct Data {
ll u, v, w ;
bool operator < (const Data & other ) const {
return w > other.w ;
}
};
//**Function**//
template<class X, class Y >
bool minimize(X & x, const Y &y ) {
return x > y ? x = y, 1:0 ;
}
template<class X, class Y >
bool maximize(X &x, const Y &y ) {
return x < y ? x = y, 1:0 ;
}
void init() {
cin>>n >> m ;
FOR(i,1, n) FOR(j, 1, m) {
cin >> arr[i][j] ;
if(arr[i][j] == '#') arr[i][j] = '0';
}
}
void Dijkstra(ll st1, ll st2 ) {
FOR(i, 0, n ) FOR(j, 0, m ) d[i][j] = INF ;
priority_queue<Data > pq ;
d[st1][st2] = arr[st1][st2] - '0' ;
pq.push({st1, st2, d[st1][st2]}) ;
while(!pq.empty()) {
Data u =pq.top() ;
pq.pop() ;
FOR(k, 0, 7) {
ll ni = u.u + dx[k] ;
ll nj = u.v + dy[k] ;
if(ni >= 1 && nj >= 1 && ni <= n && nj <= m && arr[ni][nj] != '.') {
ll w = u.w + arr[ni][nj] -'0' ;
if(d[ni][nj] > w ) pq.push({ni, nj, d[ni][nj] = w }) ;
}
}
}
}
void solve() {
FOR(i, 2, n ) {
if(arr[i][1] == '.' ) continue ;
Dijkstra(i, 1) ;
FOR(k, 1, m ) minimize(ans, d[1][k]) ;
FOR(k,1, n ) minimize(ans, d[k][m]) ;
}
FOR(i, 1, m - 1 ) {
if(arr[n][i] == '.') continue ;
Dijkstra(n, i ) ;
FOR(k, 1, m ) minimize(ans, d[1][k]) ;
FOR(k,1, n ) minimize(ans, d[k][m]) ;
}
cout << (ans == INF ? -1 : ans) << el ;
}
__ROOT__ {
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
fast;
srand(time(nullptr)) ;
int t = 1; // cin >> t ;
while(t--) {
init();
solve();
}
return (0&0);
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgaW50CiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgZmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBfX1JPT1RfXyBpbnQgbWFpbigpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJPMiIpCi8vI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCi8vI3ByYWdtYSBHQ0MgdGFyZ2V0KCJhdngyLGJtaSxibWkyLHBvcGNudCxsemNudCIpCiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTSAxMDAwMDAwMDA3CiNkZWZpbmUgTUFYTiA1MDAxCiNkZWZpbmUgSU5GICgxbGw8PDMwKQojZGVmaW5lIEJMT0NLX1NJWkUgNDI1CiNkZWZpbmUgTUFYX05PREUgMTAwMTAwMQojZGVmaW5lIExPRyAxOQojZGVmaW5lIEFMUEhBX1NJWkUgMjYKI2RlZmluZSBCQVNFIDI1NgojZGVmaW5lIE5BTUUgImZpbGUiCiNkZWZpbmUgY29tcGFyZSh2KSBzb3J0KCh2KS5iZWdpbigpLCAodikuZW5kKCkpOyAodikuZXJhc2UodW5pcXVlKCh2KS5iZWdpbigpLCAodikuZW5kKCkpLCAodikuZW5kKCkpOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgY2hyb25vIDsKY29uc3QgbGwgTU9EW10gPSB7KGxsKTFlOSArIDIyNzcsIChsbCkxZTkgKyA1Mjc3LCAobGwpMWU5ICsgODI3NywgKGxsKTFlOSArIDkyNzcsIChsbCkgMWU5ICsgNyB9Owpjb25zdCBsbCBOTU9EID0gMTsKY29uc3QgaW50IGR4W10gPSB7MCwwLDEsMSwxLC0xLC0xLC0xfTsKY29uc3QgaW50IGR5W10gPSB7MSwtMSwwLDEsLTEsMCwtMSwxfTsKLy8qKlZhcmlhYmxlKiovLwpsbCBuLCBtICwgYW5zID0gSU5GIDsKY2hhciBhcnJbTUFYTl1bTUFYTl0gOwpsbCBkW01BWE5dW01BWE5dIDsKLy8qKlN0cnVjdCoqLy8Kc3RydWN0IERhdGEgewogICAgbGwgdSwgdiwgIHcgOwogICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBEYXRhICYgb3RoZXIgKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHcgPiBvdGhlci53IDsKICAgIH0KfTsKLy8qKkZ1bmN0aW9uKiovLwp0ZW1wbGF0ZTxjbGFzcyBYLCBjbGFzcyBZID4KYm9vbCBtaW5pbWl6ZShYICYgeCwgY29uc3QgWSAmeSApIHsKICAgIHJldHVybiB4ID4geSA/IHggPSB5LCAxOjAgOwp9CnRlbXBsYXRlPGNsYXNzIFgsIGNsYXNzIFkgPgpib29sIG1heGltaXplKFggJngsIGNvbnN0IFkgJnkgKSB7CiAgICByZXR1cm4geCA8IHkgPyB4ID0geSwgMTowIDsKfQoKdm9pZCBpbml0KCkgewogICAgY2luPj5uID4+IG0gOwogICAgRk9SKGksMSwgbikgRk9SKGosIDEsIG0pIHsKICAgICAgICBjaW4gPj4gYXJyW2ldW2pdIDsKICAgICAgICBpZihhcnJbaV1bal0gPT0gJyMnKSBhcnJbaV1bal0gPSAnMCc7CiAgICB9Cn0Kdm9pZCBEaWprc3RyYShsbCBzdDEsIGxsIHN0MiApIHsKICAgIEZPUihpLCAwLCBuICkgRk9SKGosIDAsIG0gKSBkW2ldW2pdID0gSU5GIDsKICAgIHByaW9yaXR5X3F1ZXVlPERhdGEgPiBwcSA7CiAgICBkW3N0MV1bc3QyXSA9IGFycltzdDFdW3N0Ml0gLSAnMCcgOwogICAgcHEucHVzaCh7c3QxLCBzdDIsIGRbc3QxXVtzdDJdfSkgOwogICAgd2hpbGUoIXBxLmVtcHR5KCkpIHsKICAgICAgICBEYXRhIHUgPXBxLnRvcCgpIDsKICAgICAgICBwcS5wb3AoKSA7CiAgICAgICAgRk9SKGssIDAsIDcpIHsKICAgICAgICAgICAgbGwgbmkgPSB1LnUgKyBkeFtrXSA7CiAgICAgICAgICAgIGxsIG5qID0gdS52ICsgZHlba10gOwogICAgICAgICAgICBpZihuaSA+PSAxICYmIG5qID49IDEgJiYgbmkgPD0gbiAmJiBuaiA8PSBtICYmIGFycltuaV1bbmpdICE9ICcuJykgewogICAgICAgICAgICAgICAgbGwgdyA9IHUudyArIGFycltuaV1bbmpdIC0nMCcgOwogICAgICAgICAgICAgICAgaWYoZFtuaV1bbmpdID4gdyApIHBxLnB1c2goe25pLCBuaiwgZFtuaV1bbmpdID0gdyB9KSA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0Kdm9pZCBzb2x2ZSgpIHsKICAgIEZPUihpLCAyLCBuICkgewogICAgICAgIGlmKGFycltpXVsxXSA9PSAnLicgKSBjb250aW51ZSA7CiAgICAgICAgRGlqa3N0cmEoaSwgMSkgOwogICAgICAgIEZPUihrLCAxLCBtICkgbWluaW1pemUoYW5zLCBkWzFdW2tdKSA7CiAgICAgICAgRk9SKGssMSwgbiApIG1pbmltaXplKGFucywgZFtrXVttXSkgOwogICAgfQogICAgRk9SKGksIDEsIG0gIC0gMSAgKSB7CiAgICAgICAgaWYoYXJyW25dW2ldID09ICcuJykgY29udGludWUgOwogICAgICAgIERpamtzdHJhKG4sIGkgKSA7CiAgICAgICAgRk9SKGssIDEsIG0gKSBtaW5pbWl6ZShhbnMsIGRbMV1ba10pIDsKICAgICAgICBGT1IoaywxLCBuICkgbWluaW1pemUoYW5zLCBkW2tdW21dKSA7CiAgICB9CiAgICBjb3V0IDw8IChhbnMgPT0gSU5GID8gLTEgOiBhbnMpIDw8IGVsICA7Cn0gICAKCgpfX1JPT1RfXyB7CiAgICAvLyBmcmVvcGVuKE5BTUUiLmlucCIgLCAiciIgLCBzdGRpbik7CiAgICAvLyBmcmVvcGVuKE5BTUUiLm91dCIgLCAidyIsIHN0ZG91dCkgOwogICAgZmFzdDsKICAgIHNyYW5kKHRpbWUobnVsbHB0cikpIDsKICAgIGludCB0ID0gMTsgLy8gY2luID4+IHQgOwogICAgd2hpbGUodC0tKSB7CiAgICAgICAgaW5pdCgpOwogICAgICAgIHNvbHZlKCk7CiAgICB9CiAgICByZXR1cm4gKDAmMCk7Cn0K