#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:255000000")
bool firstout = 1;
int DX[4] = {-1, 0, 0, 1};
int DY[4] = {0, -1, 1, 0};
int n, m;
char S[1111][1111];
pair<int, int> X[1111][1111];
vector<pair<int, int> > V[1111][1111];
void add(int i, int j, int ii, int jj) {
  X[ii][jj] = make_pair(i, j);
  V[i][j].push_back(make_pair(ii, jj));
}
bool con(int i, int j) {
  int ii, jj;
  ii = i;
  jj = j + 1;
  if (0 <= ii && ii < n && 0 <= jj && jj < m && S[ii][jj] == '.' &&
      X[ii][jj] == make_pair(-1, -1)) {
    add(i, j, i, j);
    add(i, j, ii, jj);
    return 1;
  }
  ii = i + 1, jj = j;
  if (0 <= ii && ii < n && 0 <= jj && jj < m && S[ii][jj] == '.' &&
      X[ii][jj] == make_pair(-1, -1)) {
    add(i, j, i, j);
    add(i, j, ii, jj);
    return 1;
  }
  ii = i;
  jj = j - 1;
  if (0 <= ii && ii < n && 0 <= jj && jj < m && S[ii][jj] == '.') {
    add(X[ii][jj].first, X[ii][jj].second, i, j);
    return 1;
  }
  ii = i - 1;
  jj = j;
  if (0 <= ii && ii < n && 0 <= jj && jj < m && S[ii][jj] == '.') {
    add(X[ii][jj].first, X[ii][jj].second, i, j);
    return 1;
  }
  ii = i;
  jj = j + 1;
  if (0 <= ii && ii < n && 0 <= jj && jj < m && S[ii][jj] == '.') {
    add(X[ii][jj].first, X[ii][jj].second, i, j);
    return 1;
  }
  ii = i + 1;
  jj = j;
  if (0 <= ii && ii < n && 0 <= jj && jj < m && S[ii][jj] == '.') {
    add(X[ii][jj].first, X[ii][jj].second, i, j);
    return 1;
  }
  return 0;
}
void color(int i0, int j0) {
  int ii, jj, k, l, i, j;
  set<int> s;
  s.clear();
  for (l = (0); l < (V[i0][j0].size()); ++l) {
    i = V[i0][j0][l].first;
    j = V[i0][j0][l].second;
    for (k = (0); k < (4); ++k) {
      ii = i + DX[k];
      jj = j + DY[k];
      if (0 <= ii && ii < n && 0 <= jj && jj < m) {
        char c = S[ii][jj];
        if ('0' <= c && c <= '9') s.insert(c - '0');
      }
    }
  }
  int r;
  for (r = (0); r < (10); ++r)
    if (s.find(r) == s.end()) break;
  for (l = (0); l < (V[i0][j0].size()); ++l) {
    i = V[i0][j0][l].first;
    j = V[i0][j0][l].second;
    S[i][j] = '0' + r;
  }
}
int main() {
  int i, j, k;
  char c;
  int a, d;
  for (; scanf("%"
               "d",
               &(n)) > 0;) {
    scanf(
        "%"
        "d",
        &(m));
    for (i = (0); i < (n); ++i)
      scanf(
          "%"
          "s",
          &(S[i]));
    for (i = (0); i < (n); ++i)
      for (j = (0); j < (m); ++j) X[i][j] = make_pair(-1, -1), V[i][j].clear();
    for (i = (0); i < (n); ++i) {
      for (j = (0); j < (m); ++j)
        if (S[i][j] == '.' && X[i][j] == make_pair(-1, -1))
          if (!con(i, j)) break;
      if (j < m) break;
    }
    if (j < m)
      printf(
          "%"
          "d",
          (-1)),
          printf("\n"), firstout = 1;
    else {
      for (i = (0); i < (n); ++i)
        for (j = (0); j < (m); ++j)
          if (S[i][j] == '.') color(i, j);
      for (i = (0); i < (n); ++i)
        printf(
            "%"
            "s",
            (S[i])),
            printf("\n"), firstout = 1;
    }
  }
  return 0;
}
