#include <bits/stdc++.h>
bool debug = false;
using namespace std;
long long convertToNum(string s) {
  long long val = 0;
  for (int i = 0; i < (s.size()); i++) val = val * 10 + s[i] - '0';
  return val;
}
string convertToString(long long a) {
  string res = "";
  if (!a) return "0";
  while (a) {
    res = (char)(a % 10 + 48) + res;
    a /= 10;
  }
  return res;
}
long long GCD(long long x, long long y) {
  if (!x) return y;
  if (!y) return x;
  if (x == y) return x;
  if (x < y)
    return GCD(x, y % x);
  else
    return GCD(x % y, y);
}
long long POW(long long x, long long y, long long Base) {
  if (!y) return 1;
  long long u = POW(x, y / 2, Base);
  u = (u * u) % Base;
  if (y & 1)
    return (u * x) % Base;
  else
    return u;
}
int m, n;
char s[1010][1010];
char p[1010];
const int dx[4] = {0, 1, 0, -1};
const int dy[4] = {1, 0, -1, 0};
bool dd[300];
void khoiphuc(int X, int Y, int row, int col, string saved) {
  int cnt = 0;
  for (int i = (X); i <= (X + row - 1); i++)
    for (int j = (Y); j <= (Y + col - 1); j++) {
      s[i][j] = saved[cnt];
      cnt++;
    }
}
bool test(int X, int Y) {
  for (int k = 0; k < (4); k++)
    if (X + dx[k] >= 0 && X + dx[k] < m && Y + dy[k] >= 0 && Y + dy[k] < n)
      if (s[X + dx[k]][Y + dy[k]] == '.') return true;
  return false;
}
bool fill(int X, int Y, int row, int col, string state) {
  if (X + row - 1 >= m) return false;
  if (Y + col - 1 >= n) return false;
  int cnt = 0;
  for (int i = (X); i <= (X + row - 1); i++)
    for (int j = (Y); j <= (Y + col - 1); j++) {
      if (s[i][j] != '.' && state[cnt] == 'x') return false;
      cnt++;
    }
  string saved = "";
  for (int i = (X); i <= (X + row - 1); i++)
    for (int j = (Y); j <= (Y + col - 1); j++) saved.push_back(s[i][j]);
  cnt = 0;
  for (int i = (X); i <= (X + row - 1); i++)
    for (int j = (Y); j <= (Y + col - 1); j++) {
      if (s[i][j] == '.' && state[cnt] == 'x') s[i][j] = 'x';
      cnt++;
    }
  for (int i = (X); i <= (X + row - 1); i++)
    for (int j = (Y); j <= (Y + col - 1); j++)
      for (int k = 0; k < (4); k++)
        if (i + dx[k] >= 0 && i + dx[k] < m && j + dy[k] >= 0 && j + dy[k] < n)
          if (s[i + dx[k]][j + dy[k]] == '.')
            if (!test(i + dx[k], j + dy[k])) {
              khoiphuc(X, Y, row, col, saved);
              return false;
            }
  for (int kt = ('0'); kt <= ('9'); kt++) dd[kt] = true;
  for (int i = (X); i <= (X + row - 1); i++)
    for (int j = (Y); j <= (Y + col - 1); j++)
      if (s[i][j] == 'x')
        for (int k = 0; k < (4); k++)
          if (i + dx[k] >= 0 && i + dx[k] < m && j + dy[k] >= 0 &&
              j + dy[k] < n)
            if ('0' <= s[i + dx[k]][j + dy[k]] &&
                s[i + dx[k]][j + dy[k]] <= '9') {
              dd[s[i + dx[k]][j + dy[k]]] = false;
            }
  char findChar;
  for (int kt = ('0'); kt <= ('9'); kt++)
    if (dd[kt]) {
      findChar = kt;
      break;
    }
  for (int i = (X); i <= (X + row - 1); i++)
    for (int j = (Y); j <= (Y + col - 1); j++)
      if (s[i][j] == 'x') s[i][j] = findChar;
  return true;
}
bool attempt(int X, int Y) {
  if (fill(X, Y, 1, 2, "xx")) return true;
  if (fill(X, Y, 2, 1, "xx")) return true;
  if (fill(X, Y, 1, 3, "xxx")) return true;
  if (fill(X, Y, 3, 1, "xxx")) return true;
  if (fill(X, Y, 2, 2, "xxx.")) return true;
  if (fill(X, Y, 2, 2, "xx.x")) return true;
  if (fill(X, Y, 2, 2, "x.xx")) return true;
  if (Y > 0 && fill(X, Y - 1, 2, 2, ".xxx")) return true;
  if (fill(X, Y, 2, 3, "xxx.x.")) return true;
  if (Y > 0 && fill(X, Y - 1, 2, 3, ".x.xxx")) return true;
  if (fill(X, Y, 3, 2, "x.xxx.")) return true;
  if (Y > 0 && fill(X, Y - 1, 3, 2, ".xxx.x")) return true;
  if (Y > 0 && fill(X, Y - 1, 3, 3, ".x.xxx.x.")) return true;
  return false;
}
int main() {
  cin >> m >> n;
  gets(p);
  for (int i = 0; i < (m); i++) gets(s[i]);
  for (int i = 0; i < (m); i++)
    for (int j = 0; j < (n); j++)
      if (s[i][j] == '.')
        if (!attempt(i, j)) {
          cout << -1 << endl;
          return 0;
        }
  for (int i = 0; i < (m); i++) puts(s[i]);
  return 0;
}
