#include <bits/stdc++.h>
using namespace std;
bool arimasuka(vector<string> &map, int y, int x) {
  bool c = false;
  if (x >= 0 && x < map.at(0).size() && y >= 0 && y < map.size() &&
      map.at(y).at(x) == '#') {
    c = true;
    return c;
  } else {
    return c;
  }
}
void bomb_count(vector<string> &map, int y, int x) {
  int sum = 0;
  if (map.at(y).at(x) == '#')
    return;
  else if (map.at(y).at(x) == '.') {
    if (arimasuka(map, y + 1, x - 1)) sum++;
    if (arimasuka(map, y + 1, x)) sum++;
    if (arimasuka(map, y + 1, x + 1)) sum++;
    if (arimasuka(map, y, x - 1)) sum++;
    if (arimasuka(map, y, x + 1)) sum++;
    if (arimasuka(map, y - 1, x - 1)) sum++;
    if (arimasuka(map, y - 1, x)) sum++;
    if (arimasuka(map, y - 1, x + 1)) sum++;
    if (sum == 0)
      return;
    else if (sum == 1) {
      map.at(y).at(x) = '1';
      return;
    } else if (sum == 2) {
      map.at(y).at(x) = '2';
      return;
    } else if (sum == 3) {
      map.at(y).at(x) = '3';
      return;
    } else if (sum == 4) {
      map.at(y).at(x) = '4';
      return;
    } else if (sum == 5) {
      map.at(y).at(x) = '5';
      return;
    } else if (sum == 6) {
      map.at(y).at(x) = '6';
      return;
    } else if (sum == 7) {
      map.at(y).at(x) = '7';
      return;
    } else if (sum == 8) {
      map.at(y).at(x) = '8';
      return;
    } else {
      return;
    }
  }
}
int main() {
  int H, W;
  cin >> H >> W;
  vector<string> map(H);
  for (int i = 0; i < H; i++) {
    cin >> map.at(i);
  }
  for (int j = 0; j < H; j++) {
    for (int k = 0; k < W; k++) {
      bomb_count(map, j, k);
    }
  }
  for (int l = 0; l < H; l++) {
    cout << map.at(l) << endl;
  }
}
