#include <bits/stdc++.h>
using namespace std;
template <class T>
T inline sqr(T x) {
  return x * x;
}
template <class T>
inline void relaxMin(T &a, T b) {
  a = min(a, b);
}
template <class T>
inline void relaxMax(T &a, T b) {
  a = max(a, b);
}
string str(int i) {
  char s[100];
  sprintf(s, "%d", i);
  return string(s);
}
inline int sign(int x) { return x > 0 ? 1 : (x < 0 ? -1 : 0); }
inline int myAbs(int a) { return a > 0 ? a : -a; }
const int maxn = 1010;
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
char s[maxn][maxn];
int h, w, n, a[maxn][maxn];
vector<pair<int, int> > v[maxn * maxn];
int main() {
  scanf("%d%d", &h, &w);
  for (int i = 0; i < (int)(h); i++) scanf("%s", s[i]);
  for (int i = 0; i < (int)(h); i++)
    for (int j = 0; j < (int)(w); j++)
      if (s[i][j] == '.' && s[i][j + 1] == '.') {
        a[i][j] = a[i][j + 1] = ++n;
        s[i][j] = s[i][j + 1] = '#';
      }
  for (int j = 0; j < (int)(w); j++)
    for (int i = 0; i < (int)(h); i++)
      if (s[i][j] == '.' && s[i + 1][j] == '.') {
        a[i][j] = a[i + 1][j] = ++n;
        s[i][j] = s[i + 1][j] = '#';
      }
  for (int i = 0; i < (int)(h); i++)
    for (int j = 0; j < (int)(w); j++)
      if (s[i][j] == '.') {
        for (int k = 0; k < (int)(4); k++) {
          int i1 = i + dy[k], j1 = j + dx[k];
          if (0 <= i1 && i1 < h && 0 <= j1 && j1 < w && a[i1][j1])
            a[i][j] = a[i1][j1], s[i][j] = '#';
        }
        if (!a[i][j]) {
          puts("-1");
          return 0;
        }
      }
  for (int i = 0; i < (int)(h); i++)
    for (int j = 0; j < (int)(w); j++)
      if (a[i][j]) v[a[i][j]].push_back(make_pair(j, i));
  memset(a, -1, sizeof(a));
  for (int i = (int)(1); i <= (int)(n); i++) {
    assert((int)(v[i]).size() > 0);
    int is[11];
    memset(is, 0, sizeof(is));
    for (int j = 0; j < (int)((int)(v[i]).size()); j++)
      for (int k = 0; k < (int)(4); k++) {
        int x = v[i][j].first + dx[k];
        int y = v[i][j].second + dy[k];
        if (0 <= x && x < w && 0 <= y && y < h && a[y][x] != -1)
          is[a[y][x]] = 1;
      }
    int val = 0;
    while (is[val]) val++;
    assert(val < 10);
    for (int j = 0; j < (int)((int)(v[i]).size()); j++)
      a[v[i][j].second][v[i][j].first] = val;
  }
  for (int i = 0; i < (int)(h); i++) {
    for (int j = 0; j < (int)(w); j++)
      if (a[i][j] == -1)
        putchar('#');
      else
        putchar('0' + a[i][j]);
    puts("");
  }
  return 0;
}
