#include <bits/stdc++.h>
using namespace std;
const int inf = 1000 * 1000 * 1000;
vector<vector<int> > U, C, M;
const int dx[4] = {0, 0, 1, -1};
const int dy[4] = {1, -1, 0, 0};
int n, m;
bool bound(int x, int y) { return x >= 0 && y >= 0 && x < n && y < m; }
string s;
int main() {
  cin >> n >> m;
  M.resize(n, vector<int>(m, 0));
  C.resize(n, vector<int>(m, 0));
  U.resize(n, vector<int>(m, 0));
  for (int i = 0; i < n; ++i) {
    cin >> s;
    for (int j = 0; j < m; ++j) M[i][j] = s[j] != '.';
  }
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j) C[i][j] = (i % 3) * 3 + (j % 3);
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m - 1; j++) {
      if (!U[i][j] && !U[i][j + 1] && !M[i][j] && !M[i][j + 1]) {
        if ((i + j) & 1)
          C[i][j + 1] = C[i][j];
        else
          C[i][j] = C[i][j + 1];
        U[i][j] = 1;
        U[i][j + 1] = 1;
      }
    }
  }
  for (int j = 0; j < m; ++j) {
    for (int i = 0; i < n - 1; ++i) {
      if (!U[i][j] && !U[i + 1][j] && !M[i + 1][j] && !M[i][j]) {
        if ((i + j) & 1)
          C[i + 1][j] = C[i][j];
        else
          C[i][j] = C[i + 1][j];
        U[i + 1][j] = 1;
        U[i][j] = 1;
      }
    }
  }
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j)
      if (!U[i][j] && !M[i][j])
        for (int k = 0; k < 4; ++k)
          if (bound(i + dx[k], j + dy[k]) && U[i + dx[k]][j + dy[k]]) {
            C[i][j] = C[i + dx[k]][j + dy[k]], U[i][j] = 1;
            break;
          }
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j)
      if (!U[i][j] && !M[i][j]) {
        cout << -1 << endl;
        return 0;
      }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j)
      if (U[i][j])
        cout << C[i][j];
      else
        cout << '#';
    cout << endl;
  }
  return 0;
}
