#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000;
char s[maxn + 1];
bool a[maxn][maxn];
int col[maxn][maxn], ad[maxn][maxn];
const int go[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
bool used[9];
int h, w;
void print() {
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      if (col[i][j] == -1)
        printf("#");
      else {
        if (col[i][j] == 23)
          printf("?");
        else {
          printf("%d", col[i][j]);
        }
      }
    }
    printf("\n");
  }
}
int main() {
  while (scanf("%d%d", &h, &w) >= 2) {
    for (int i = 0; i < h; i++) {
      scanf("%s", s);
      for (int j = 0; j < w; j++) a[i][j] = (s[j] != '#');
    }
    bool ok = 1;
    for (int i = 0; ok && i < h; i++) {
      for (int j = 0; j < w; j++) {
        if (!a[i][j]) {
          col[i][j] = -1;
          continue;
        }
        col[i][j] = 0;
        ad[i][j] = 0;
        for (int g = 0; g < 4; g++) {
          int in = i + go[g][0], jn = j + go[g][1];
          if (in < 0 || jn < 0 || in >= h || jn >= w) continue;
          ad[i][j] += a[in][jn];
        }
        if (!ad[i][j]) {
          ok = 0;
          break;
        }
      }
    }
    if (!ok) {
      printf("-1\n");
      continue;
    }
    int ymn = 0, xmn = 0;
    while (1) {
      bool ch = 0;
      for (; ymn < h; ymn++) {
        for (; xmn < w; xmn++) {
          if (!col[ymn][xmn]) {
            ch = 1;
            break;
          }
        }
        if (ch) break;
        xmn = 0;
      }
      if (!ch) break;
      col[ymn][xmn] = 23;
      bool fnd = 0;
      for (int g = 0; g < 4; g++) {
        int in = ymn + go[g][0], jn = xmn + go[g][1];
        if (in < 0 || jn < 0 || in >= h || jn >= w) continue;
        if (!col[in][jn]) {
          fnd = 1;
          col[in][jn] = 23;
          break;
        }
      }
      assert(fnd);
      memset(used, 0, sizeof(used));
      for (int i = ymn; i <= ymn + 1; i++) {
        if (i >= h) break;
        for (int j = xmn; j <= xmn + 1; j++) {
          if (j >= w) break;
          if (col[i][j] != 23) break;
          for (int g = 0; g < 4; g++) {
            int in = i + go[g][0], jn = j + go[g][1];
            if (in < 0 || jn < 0 || in >= h || jn >= w) continue;
            if (!col[in][jn]) {
              ad[in][jn]--;
              if (!ad[in][jn]) {
                col[in][jn] = 23;
              }
            }
          }
        }
      }
      for (int i = ymn; i <= ymn + 2; i++) {
        if (i >= h) break;
        for (int j = max(0, xmn - 1); j <= xmn + 2; j++) {
          if (j >= w) break;
          if (col[i][j] != 23) continue;
          for (int g = 0; g < 4; g++) {
            int in = i + go[g][0], jn = j + go[g][1];
            if (in < 0 || jn < 0 || in >= h || jn >= w) continue;
            if (col[in][jn] > 0) {
              used[col[in][jn]] = 1;
            }
          }
        }
      }
      int needcol = 0;
      for (int i = 1; i < 8; i++)
        if (!used[i]) {
          needcol = i;
          break;
        }
      assert(needcol);
      for (int i = ymn; i <= ymn + 2; i++) {
        if (i >= h) break;
        for (int j = max(0, xmn - 1); j <= xmn + 2; j++) {
          if (j >= w) break;
          if (col[i][j] != 23) continue;
          col[i][j] = needcol;
        }
      }
    }
    print();
    break;
  }
  return 0;
}
