#include <iostream>
using namespace std;
#define MAXN 4
int map[MAXN][MAXN];
bool visited[MAXN][MAXN];
int N, M;
int ans;
pair<int,int> find_coord(){
for (int x = 0; x < N; x++){
for (int y = 0 ;y <M; y++){
if (!visited[x][y]){
return {x,y};
}
}
}
return {-1,-1};
}
void dfs(int sum){
pair<int,int> coord = find_coord();
int x = coord.first;
int y = coord.second;
if (coord.first == -1){
if (ans < sum) ans = sum;
return;
}
int tmp = 0;
int len = 0;
for (int i= 0; i + x < N && !visited[i+x][y]; i++){
visited[i+x][y] = true;
tmp *= 10;
tmp += map[i+x][y];
len++;
dfs(sum+tmp);
}
for (int i = 1; i <len; i++){
visited[i+x][y] = false;
}
len = 1;
tmp = map[x][y];
for (int i = 1; i + y <M && !visited[x][i+y]; i++){
visited[x][i+y] = true;
tmp *= 10;
tmp += map[x][i+y];
len++;
dfs(sum+tmp);
}
for (int i = 0; i < len; i++){
visited[x][i+y] = false;
}
}
int main(){
scanf("%d%d",&N,&M);
for (int i = 0; i < N; i++){
for (int j = 0;j<M;j ++){
scanf("%1d",&map[i][j]);
}
}
dfs(0);
cout << ans <<"\n";
return 0;
}