#include <bits/stdc++.h>
const int xx[4] = {0, -1, 0, 1};
const int yy[4] = {-1, 0, 1, 0};
char s[1010][1010];
bool visit[12];
bool flag[1010][1010];
int n, m;
bool ins(int x, int y) { return x >= 0 && x < n && y >= 0 && y < m; }
void dfs(int x, int y) {
  int nowx, nowy;
  for (int i = 0; i < 3; i++) {
    nowx = x + xx[i];
    nowy = y + yy[i];
    if (ins(nowx, nowy) && s[nowx][nowy] >= '0' && s[nowx][nowy] <= '9')
      visit[s[nowx][nowy] - '0'] = 1;
  }
}
void dfs1(int x, int y) {
  int nowx, nowy;
  flag[x][y] = 1;
  dfs(x, y);
  for (int i = 0; i < 4; i++) {
    nowx = x + xx[i];
    nowy = y + yy[i];
    if (ins(nowx, nowy) && flag[nowx][nowy] == 0 && s[nowx][nowy] == s[x][y])
      dfs1(nowx, nowy);
  }
}
void dfs2(int x, int y, int p) {
  int nowx, nowy;
  flag[x][y] = 0;
  for (int i = 0; i < 4; i++) {
    nowx = x + xx[i];
    nowy = y + yy[i];
    if (ins(nowx, nowy) && flag[nowx][nowy] == 1 && s[nowx][nowy] == s[x][y])
      dfs2(nowx, nowy, p);
  }
  s[x][y] = p + '0';
}
int main() {
  {
    memset(flag, 0, sizeof(flag));
    srand(time(0));
    bool end = 1;
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++) scanf("%s", s[i]);
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++)
        if (s[i][j] == '.') {
          if (j < m - 1 && s[i][j + 1] == '.') {
            memset(visit, 0, sizeof(visit));
            dfs(i, j);
            dfs(i, j + 1);
            int p = 0;
            while (visit[p]) p++;
            if (p == 10) p = rand() % 10;
            s[i][j] = s[i][j + 1] = p + '0';
          } else if (i < n - 1 && s[i + 1][j] == '.') {
            memset(visit, 0, sizeof(visit));
            dfs(i, j);
            dfs(i + 1, j);
            int p = 0;
            while (visit[p]) p++;
            if (p == 10) p = rand() % 10;
            s[i][j] = s[i + 1][j] = p + '0';
          } else {
            if (i && s[i - 1][j] != '#') {
              memset(visit, 0, sizeof(visit));
              if (j && s[i][j - 1] != '#') visit[s[i][j - 1] - '0'] = 1;
              if (j < m - 1 && s[i][j + 1] != '#') visit[s[i][j + 1] - '0'] = 1;
              if (visit[s[i - 1][j] - '0']) {
                dfs1(i - 1, j);
                int p = 0;
                while (visit[p]) p++;
                if (p == 10) p = rand() % 10;
                dfs2(i - 1, j, p);
              }
              s[i][j] = s[i - 1][j];
            } else if (j && s[i][j - 1] != '#') {
              memset(visit, 0, sizeof(visit));
              if (i && s[i - 1][j] != '#') visit[s[i - 1][j] - '0'] = 1;
              if (j < m - 1 && s[i][j + 1] != '#') visit[s[i][j + 1] - '0'] = 1;
              if (visit[s[i][j - 1] - '0']) {
                dfs1(i, j - 1);
                int p = 0;
                while (visit[p]) p++;
                if (p == 10) p = rand() % 10;
                dfs2(i, j - 1, p);
              }
              s[i][j] = s[i][j - 1];
            } else if (j < m - 1 && s[i][j + 1] != '#') {
              memset(visit, 0, sizeof(visit));
              if (j && s[i][j - 1] != '#') visit[s[i][j - 1] - '0'] = 1;
              if (i && s[i - 1][j] != '#') visit[s[i - 1][j] - '0'] = 1;
              if (visit[s[i][j + 1] - '0']) {
                dfs1(i, j + 1);
                int p = 0;
                while (visit[p]) p++;
                if (p == 10) p = rand() % 10;
                dfs2(i, j + 1, p);
              }
              s[i][j] = s[i][j + 1];
            } else {
              end = 0;
              s[i][j] = '#';
            }
          }
        }
    if (end) {
      for (int i = 0; i < n; i++) puts(s[i]);
    } else
      printf("-1\n");
  }
  return 0;
}
