#include <bits/stdc++.h>
using namespace std;
int sum, l, r, n, m;
vector<vector<char>> arr;
vector<vector<int>> vis, pre, dp;
vector<pair<int, int>> dir = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
void dfs(int cx, int cy) {
l = min(l, cy);
r = max(r, cy);
if(arr[cx][cy] != '.') sum += arr[cx][cy] - '0';
for(auto i: dir) {
int nx = cx+i.first, ny = cy+i.second;
if(nx < 0 || nx > n || ny < 0 || ny > m) continue;
if(vis[nx][ny] || arr[nx][ny] == '.') continue;
vis[nx][ny] = 1;
dfs(nx, ny);
}
}
int cost(int x, int y) {
return pre[y][y] - pre[x-1][y];
}
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> m;
arr.assign(n+2, vector<char>(m+2, '.'));
vis.assign(n+2, vector<int>(m+2, 0));
pre.assign(m+2, vector<int>(m+2, 0));
dp.assign(m+2, vector<int>(m+2, 0));
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
cin >> arr[i][j];
}
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
if(vis[i][j] == 0 && arr[i][j] != '.') {
l = j, r = j;
sum = 0;
vis[i][j] = 1;
dfs(i, j);
pre[l][r] += sum;
}
}
}
for(int i=1; i<=m; i++) {
for(int j=1; j<=m; j++) {
pre[i][j] += pre[i-1][j];
}
}
for(int i=1; i<=m; i++) {
for(int j=m; j>=1; j--) {
pre[i][j] += pre[i][j+1];
}
}
for(int k=1; k<=m; k++) {
for(int i=k; i<=m; i++) {
for(int j=k-1; j<i; j++) {
dp[k][i] = max(dp[k][i], dp[k-1][j] + cost(j+1, i));
}
}
}
for(int i=1; i<=m; i++) {
int ans = 0;
for(int j=i; j<=m; j++) {
ans = max(ans, dp[i][j]);
}
cout << ans << "\n";
}
}