#include <bits/stdc++.h>
using namespace std;
int n, m;
char s[1024][1024];
inline bool u(int i, int j) {
  return 0 <= i && i < n && 0 <= j && j <= m && s[i][j] == '.';
}
int p[1024 * 1024], c[1024 * 1024];
bool b[1024][1024];
int sid(int x) {
  int y, z = x;
  for (; (y = p[z]) != z; z = y)
    ;
  for (; x != z; x = y) {
    y = p[x];
    p[x] = z;
  }
  return x;
}
int f(int x, int y) { return sid(x * m + y); }
bool bad(int i, int j) {
  return u(i, j) && !u(i - 1, j) && !u(i + 1, j) && !u(i, j - 1) &&
         !u(i, j + 1);
}
void unite(int i, int j) {
  c[i] += c[j];
  p[j] = i;
}
vector<int> adj[1024 * 1024];
void updc(int i) {
  if (c[i] < 0) {
    int z = 0;
    for (int j : adj[i])
      if (c[j] >= 0) z |= 1 << (c[j] - '0');
    c[i] = '0' + __builtin_ctz(~z);
  }
}
int main() {
  cin >> n >> m;
  for (int i(0); i < n; ++i) scanf("%s", s[i]);
  for (int i(0); i < n; ++i)
    for (int j(0); j < m; ++j) {
      if (!u(i, j)) continue;
      p[i * m + j] = i * m + j;
      c[i * m + j] = 1;
      if (bad(i, j)) {
        puts("-1");
        return 0;
      }
    }
  for (int i(0); i < n; ++i)
    for (int j(0); j < m; ++j)
      if (u(i, j) && !b[i][j]) {
        int dx[] = {-1, 0, 1, 0}, dy[] = {0, -1, 0, 1};
        for (int k(0); k < 4; ++k) {
          int x = i + dx[k], y = j + dy[k];
          if (u(x, y) && !b[x][y]) {
            b[i][j] = b[x][y] = true;
            unite(f(i, j), f(x, y));
            break;
          }
        }
      }
  for (int i(0); i < n; ++i) {
    for (int j(0); j < m; ++j)
      if (u(i, j) && !b[i][j]) {
        int dx[] = {-1, 0, 1, 0}, dy[] = {0, -1, 0, 1};
        for (int k(0); k < 4; ++k) {
          int x = i + dx[k], y = j + dy[k];
          if (u(x, y) && c[f(x, y)] + c[f(i, j)] <= 5) {
            unite(f(x, y), f(i, j));
            b[i][j] = true;
            break;
          }
        }
      }
  }
  for (int i(0); i < n; ++i)
    for (int j(0); j < m; ++j)
      if (u(i, j)) {
        if (u(i + 1, j) && f(i, j) != f(i + 1, j)) {
          adj[f(i, j)].push_back(f(i + 1, j));
          adj[f(i + 1, j)].push_back(f(i, j));
        }
        if (u(i, j + 1) && f(i, j) != f(i, j + 1)) {
          adj[f(i, j)].push_back(f(i, j + 1));
          adj[f(i, j + 1)].push_back(f(i, j));
        }
        c[f(i, j)] = -1;
      }
  for (int i(0); i < n; ++i)
    for (int j(0); j < m; ++j)
      if (u(i, j)) {
        updc(f(i, j));
        s[i][j] = c[f(i, j)];
      }
  for (int i(0); i < n; ++i) puts(s[i]);
  return 0;
}
