#include <bits/stdc++.h>
using namespace std;
template <typename T>
bool setmin(T& a, T b) {
  if (b < a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
bool setmax(T& a, T b) {
  if (b > a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
bool setmineq(T& a, T b) {
  if (b <= a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
bool setmaxeq(T& a, T b) {
  if (b >= a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
T gcd(T a, T b) {
  return (b == 0 ? a : gcd(b, a % b));
}
template <typename T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
int h, w;
string s[52];
int main() {
  cin >> h >> w;
  for (int i = (0); i < (h + 2); i++) {
    s[0] += ".";
  }
  for (int i = (1); i <= (h); i++) {
    cin >> s[i];
    s[i] = "." + s[i] + ".";
  }
  for (int i = (0); i < (h + 2); i++) {
    s[h + 1] += ".";
  }
  for (int i = (1); i <= (h); i++) {
    for (int j = (1); j <= (w); j++) {
      if (s[i][j] != '.') {
        continue;
      }
      s[i][j] = '0';
      for (int ii = (-1); ii <= (1); ii++) {
        for (int jj = (-1); jj <= (1); jj++) {
          if (s[i + ii][j + jj] == '#') {
            s[i][j]++;
          }
        }
      }
    }
  }
  for (int i = (1); i <= (h); i++) {
    for (int j = (1); j <= (w); j++) {
      cout << s[i][j];
    }
    cout << "\n";
  }
  return 0;
}
