#include <bits/stdc++.h>
using namespace std;
int R, C;
int f[1060][1060];
int res[1060][1060];
int used[1060][1060];
int nb[10];
int dx[] = {-1, 0, 0, 1};
int dy[] = {0, -1, 1, 0};
void go(int r, int c) {
  if (used[r][c] != -1) return;
  used[r][c] = -2;
  for (int i = (0); i < (4); ++i)
    if (used[r + dx[i]][c + dy[i]] >= 0) nb[used[r + dx[i]][c + dy[i]]] = 1;
  for (int i = (0); i < (4); ++i)
    if (res[r + dx[i]][c + dy[i]] == res[r][c]) go(r + dx[i], c + dy[i]);
}
void paint(int r, int c, int col) {
  if (used[r][c] != -2) return;
  used[r][c] = col;
  for (int i = (0); i < (4); ++i)
    if (used[r + dx[i]][c + dy[i]] == -2) paint(r + dx[i], c + dy[i], col);
}
int main() {
  cin >> R >> C;
  string s;
  memset(f, 0, sizeof f);
  memset(res, -1, sizeof res);
  for (int i = (0); i < (R); ++i) {
    cin >> s;
    for (int j = (0); j < (C); ++j) f[i + 1][j + 1] = s[j] == '.';
  }
  bool ok = true;
  for (int r = (1); r <= (R); ++r)
    for (int c = (1); c <= (C); ++c)
      if (f[r][c]) {
        bool is = f[r - 1][c] || f[r + 1][c] || f[r][c - 1] || f[r][c + 1];
        if (!is) {
          ok = false;
        }
      }
  if (!ok) {
    cout << -1 << endl;
    return 0;
  }
  int col = 0;
  vector<pair<int, int> > bad;
  for (int r = (1); r <= (R); ++r)
    for (int c = (1); c <= (C); ++c)
      if (f[r][c] && res[r][c] == -1) {
        if (f[r][c + 1] && res[r][c + 1] == -1) {
          ++col;
          res[r][c] = res[r][c + 1] = col;
        } else if (f[r + 1][c] && res[r + 1][c] == -1) {
          ++col;
          res[r][c] = res[r + 1][c] = col;
        } else {
          bad.push_back(pair<int, int>(r, c));
        }
      }
  for (int i = (0); i < (bad.size()); ++i) {
    int r = bad[i].first;
    int c = bad[i].second;
    for (int j = (0); j < (4); ++j)
      if (f[r + dx[j]][c + dy[j]]) res[r][c] = res[r + dx[j]][c + dy[j]];
  }
  memset(used, -1, sizeof used);
  for (int r = (1); r <= (R); ++r)
    for (int c = (1); c <= (C); ++c)
      if (f[r][c] && used[r][c] == -1) {
        memset(nb, 0, sizeof nb);
        go(r, c);
        int canuse = 0;
        for (int i = (0); i < (10); ++i)
          if (!nb[i]) {
            canuse = i;
            break;
          }
        paint(r, c, canuse);
      }
  for (int r = (1); r <= (R); ++r) {
    for (int c = (1); c <= (C); ++c) {
      if (f[r][c])
        printf("%d", used[r][c]);
      else
        printf("#");
    }
    puts("");
  }
}
