#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:160000000")
const int N = 1111;
char s[N][N];
bool color[11];
int d[2][4] = {{1, 0, -1, 0}, {0, 1, 0, -1}};
int n, m;
void dfs(int x, int y, int cc, int nc) {
  s[x][y] = nc;
  for (int dir = 0; dir < 4; ++dir) {
    int nx = x + d[0][dir];
    int ny = y + d[1][dir];
    if (nx >= 0 && nx < n && ny >= 0 && ny < m) {
      if (s[nx][ny] == cc) {
        dfs(nx, ny, cc, nc);
      } else {
        if (s[nx][ny] >= '0' && s[nx][ny] <= '9') {
          color[s[nx][ny] - '0'] = 1;
        }
      }
    }
  }
}
void recolor(int x, int y) {
  memset(color, 0, sizeof(color));
  dfs(x, y, 1, 2);
  int c = 0;
  for (c = 0; c < 10; ++c) {
    if (!color[c]) {
      break;
    }
  }
  dfs(x, y, 2, c + '0');
}
int main() {
  scanf("%d%d ", &n, &m);
  for (int i = 0; i < n; ++i) {
    gets(s[i]);
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      if (j < m - 1 && s[i][j] == '.' && s[i][j + 1] == '.') {
        s[i][j] = 1;
        s[i][j + 1] = 1;
        recolor(i, j);
      }
      if (i < n - 1 && s[i][j] == '.' && s[i + 1][j] == '.') {
        s[i][j] = 1;
        s[i + 1][j] = 1;
        recolor(i, j);
      }
    }
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      if (s[i][j] == '.') {
        bool ok = 0;
        for (int x = i - 1; x <= i + 1; ++x) {
          for (int y = j - 1; y <= j + 1; ++y) {
            if (abs(i - x) + abs(j - y) == 1 && x >= 0 && x < n && y >= 0 &&
                y < m && s[x][y] >= '0' && s[x][y] <= '9') {
              ok = 1;
              dfs(x, y, s[x][y], 1);
              s[i][j] = 1;
              recolor(i, j);
              break;
            }
          }
          if (ok) {
            break;
          }
        }
        if (s[i][j] == '.') {
          printf("-1\n");
          return 0;
        }
      }
    }
  }
  for (int i = 0; i < n; ++i) {
    puts(s[i]);
  }
  return 0;
}
