#include <bits/stdc++.h>
using namespace std;
int arr[100005];
int brr[100005];
char s[1234][1234];
int vis[1234][1234];
int has[1234][1234];
int f[1234567];
int n, m, c, g;
void dfs(int x, int y) {
  if (x < 0 || y < 0 || x == n || y == m || vis[x][y] || s[x][y] == '*') return;
  if (s[x][y] == '.') {
    vis[x][y] = 1;
    has[x][y] = g;
    f[g]++;
    dfs(x, y + 1);
    dfs(x, y - 1);
    dfs(x - 1, y);
    dfs(x + 1, y);
  }
}
int main() {
  cin >> n >> m;
  int i, j;
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; ++j) {
      cin >> s[i][j];
    }
  }
  for (i = 0; i < n; ++i) {
    for (j = 0; j < m; ++j) {
      if (s[i][j] == '.' && vis[i][j] == 0) {
        g++;
        dfs(i, j);
      }
    }
  }
  for (i = 0; i < n; ++i) {
    for (j = 0; j < m; ++j) {
      c = 1;
      set<int> se;
      if (s[i][j] == '*') {
        if (j > 0) se.insert(has[i][j - 1]);
        if (i > 0) se.insert(has[i - 1][j]);
        if (j + 1 < m) se.insert(has[i][j + 1]);
        if (i + 1 < n) se.insert(has[i + 1][j]);
        for (set<int>::iterator it = se.begin(); it != se.end(); ++it) {
          c = c + f[*it];
        }
        cout << c % 10;
      } else
        cout << ".";
    }
    cout << endl;
  }
}
