#include <bits/stdc++.h>
#define el '\n'
#define fi first
#define sec second
#define pb push_back
#define int long long
#define pii pair<int,int>
#define sz(v) (int)(v).size()
#define all(v) (v).begin(),(v).end()
#define FOR(i, a, b) for(int i = (a), _b = (b); i <= _b; i++)
#define REP(i, a, b) for(int i = (a), _b = (b); i >= _b; i--)
using namespace std;
const int INF = (int)1e18 + 462010;
const int MAX_N = 2000;
int d1[MAX_N + 5][MAX_N + 5], d2[MAX_N + 5][MAX_N + 5], ans[MAX_N + 5][MAX_N + 5];
int h[MAX_N + 5], L[MAX_N + 5], R[MAX_N + 5];
bool a[MAX_N + 5][MAX_N + 5];
int n, m;
void Input(){
cin >> n >> m;
FOR(i, 1, n){
string s;
cin >> s;
FOR(j, 1, m) a[i][j] = (s[j - 1] == '#');
}
}
void process(int i){
FOR(j, 1, m)
h[j] = (!a[i][j] ? h[j] + 1 : 0LL);
stack<int> st;
FOR(j, 1, m){
while(sz(st) && h[st.top()] >= h[j]) st.pop();
L[j] = j - (sz(st) ? st.top() : 0);
st.push(j);
}
while(sz(st)) st.pop();
REP(j, m, 1){
while(sz(st) && h[st.top()] > h[j]) st.pop();
R[j] = (sz(st) ? st.top() : m + 1) - j;
st.push(j);
}
FOR(j, 1, m){
if(!h[j]) continue;
int x = min(L[j], R[j]), y = max(L[j], R[j]);
int z = L[j] + R[j] - 1;
d1[h[j]][1]++;
d1[h[j]][x + 1]--;
d1[h[j]][y + 1]--;
d1[h[j]][z + 1]++;
d2[h[j]][x + 1] += x;
d2[h[j]][y + 1] -= x;
d2[h[j]][y + 1] += L[j] + R[j];
d2[h[j]][z + 1] -= L[j] + R[j];
}
}
void Solve(){
FOR(i, 1, n) process(i);
FOR(i, 1, n) FOR(j, 1, m){
d1[i][j] += d1[i][j - 1];
d2[i][j] += d2[i][j - 1];
}
REP(i, n, 1) FOR(j, 1, m){
ans[i][j] = ans[i + 1][j];
ans[i][j] += d1[i][j] * j + d2[i][j];
}
FOR(i, 1, n){
FOR(j, 1, m) cout << ans[i][j] << " ";
cout << el;
}
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
Input();
Solve();
return 0;
}
CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgoKI2RlZmluZSBlbCAnXG4nCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZWMgc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgc3oodikgKGludCkodikuc2l6ZSgpCiNkZWZpbmUgYWxsKHYpICh2KS5iZWdpbigpLCh2KS5lbmQoKQojZGVmaW5lIEZPUihpLCBhLCBiKSBmb3IoaW50IGkgPSAoYSksIF9iID0gKGIpOyBpIDw9IF9iOyBpKyspCiNkZWZpbmUgUkVQKGksIGEsIGIpIGZvcihpbnQgaSA9IChhKSwgX2IgPSAoYik7IGkgPj0gX2I7IGktLSkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgSU5GID0gKGludCkxZTE4ICsgNDYyMDEwOwpjb25zdCBpbnQgTUFYX04gPSAyMDAwOwoKaW50IGQxW01BWF9OICsgNV1bTUFYX04gKyA1XSwgZDJbTUFYX04gKyA1XVtNQVhfTiArIDVdLCBhbnNbTUFYX04gKyA1XVtNQVhfTiArIDVdOwppbnQgaFtNQVhfTiArIDVdLCBMW01BWF9OICsgNV0sIFJbTUFYX04gKyA1XTsKYm9vbCBhW01BWF9OICsgNV1bTUFYX04gKyA1XTsKaW50IG4sIG07Cgp2b2lkIElucHV0KCl7CiAgICBjaW4gPj4gbiA+PiBtOwogICAgRk9SKGksIDEsIG4pewogICAgICAgIHN0cmluZyBzOwogICAgICAgIGNpbiA+PiBzOwogICAgICAgIEZPUihqLCAxLCBtKSBhW2ldW2pdID0gKHNbaiAtIDFdID09ICcjJyk7CiAgICB9Cn0KCnZvaWQgcHJvY2VzcyhpbnQgaSl7CiAgICBGT1IoaiwgMSwgbSkKICAgICAgICBoW2pdID0gKCFhW2ldW2pdID8gaFtqXSArIDEgOiAwTEwpOwoKICAgIHN0YWNrPGludD4gc3Q7CiAgICBGT1IoaiwgMSwgbSl7CiAgICAgICAgd2hpbGUoc3ooc3QpICYmIGhbc3QudG9wKCldID49IGhbal0pIHN0LnBvcCgpOwoKICAgICAgICBMW2pdID0gaiAtIChzeihzdCkgPyBzdC50b3AoKSA6IDApOwogICAgICAgIHN0LnB1c2goaik7CiAgICB9CgogICAgd2hpbGUoc3ooc3QpKSBzdC5wb3AoKTsKCiAgICBSRVAoaiwgbSwgMSl7CiAgICAgICAgd2hpbGUoc3ooc3QpICYmIGhbc3QudG9wKCldID4gaFtqXSkgc3QucG9wKCk7CgogICAgICAgIFJbal0gPSAoc3ooc3QpID8gc3QudG9wKCkgOiBtICsgMSkgLSBqOwogICAgICAgIHN0LnB1c2goaik7CiAgICB9CgogICAgRk9SKGosIDEsIG0pewogICAgICAgIGlmKCFoW2pdKSBjb250aW51ZTsKCiAgICAgICAgaW50IHggPSBtaW4oTFtqXSwgUltqXSksIHkgPSBtYXgoTFtqXSwgUltqXSk7CiAgICAgICAgaW50IHogPSBMW2pdICsgUltqXSAtIDE7CgogICAgICAgIGQxW2hbal1dWzFdKys7CiAgICAgICAgZDFbaFtqXV1beCArIDFdLS07CgogICAgICAgIGQxW2hbal1dW3kgKyAxXS0tOwogICAgICAgIGQxW2hbal1dW3ogKyAxXSsrOwoKICAgICAgICBkMltoW2pdXVt4ICsgMV0gKz0geDsKICAgICAgICBkMltoW2pdXVt5ICsgMV0gLT0geDsKCiAgICAgICAgZDJbaFtqXV1beSArIDFdICs9IExbal0gKyBSW2pdOwogICAgICAgIGQyW2hbal1dW3ogKyAxXSAtPSBMW2pdICsgUltqXTsKICAgIH0KfQoKdm9pZCBTb2x2ZSgpewogICAgRk9SKGksIDEsIG4pIHByb2Nlc3MoaSk7CgogICAgRk9SKGksIDEsIG4pIEZPUihqLCAxLCBtKXsKICAgICAgICBkMVtpXVtqXSArPSBkMVtpXVtqIC0gMV07CiAgICAgICAgZDJbaV1bal0gKz0gZDJbaV1baiAtIDFdOwogICAgfQoKICAgIFJFUChpLCBuLCAxKSBGT1IoaiwgMSwgbSl7CiAgICAgICAgYW5zW2ldW2pdID0gYW5zW2kgKyAxXVtqXTsKICAgICAgICBhbnNbaV1bal0gKz0gZDFbaV1bal0gKiBqICsgZDJbaV1bal07CiAgICB9CgogICAgRk9SKGksIDEsIG4pewogICAgICAgIEZPUihqLCAxLCBtKSBjb3V0IDw8IGFuc1tpXVtqXSA8PCAiICI7CiAgICAgICAgY291dCA8PCBlbDsKICAgIH0KfQoKc2lnbmVkIG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwoKICAgIElucHV0KCk7CiAgICBTb2x2ZSgpOwoKICAgIHJldHVybiAwOwp9Cg==