#include <bits/stdc++.h>
#pragma comment(linker, "/stack:64000000")
using namespace std;
template <typename first>
inline first abs(const first& a) {
  return a < 0 ? -a : a;
}
template <typename first>
inline first sqr(const first& a) {
  return a * a;
}
const long double PI = 3.1415926535897932384626433832795;
const long double EPS = 1e-9;
const int INF = 1000 * 1000 * 1000;
const int N = 1000 + 13;
const int dx[] = {0, 1, 0, -1};
const int dy[] = {1, 0, -1, 0};
int n, m;
int a[N][N];
vector<pair<int, int> > neib;
int used[N][N], u = 0;
void dfs(int x, int y, int col) {
  used[x][y] = u;
  neib.push_back(make_pair((x), (y)));
  for (int i = 0; i < int(4); i++) {
    int tx = x + dx[i], ty = y + dy[i];
    if (!(0 <= (tx) && (tx) < (n) && 0 <= (ty) && (ty) < (m)) ||
        a[tx][ty] != col)
      continue;
    if (used[tx][ty] == u) continue;
    dfs(tx, ty, col);
  }
}
bool color[10];
int getCol(const vector<pair<int, int> >& v) {
  memset(color, 0, sizeof(color));
  for (int i = 0; i < int(int((v).size())); i++) {
    int x = v[i].first, y = v[i].second;
    for (int j = 0; j < int(4); j++) {
      int tx = x + dx[j], ty = y + dy[j];
      if (!(0 <= (tx) && (tx) < (n) && 0 <= (ty) && (ty) < (m)) ||
          a[tx][ty] < 0 || a[tx][ty] > 9)
        continue;
      bool ok = true;
      for (int k = 0; k < int(int((v).size())); k++)
        if (make_pair((tx), (ty)) == v[k]) {
          ok = false;
          break;
        }
      if (!ok) continue;
      color[a[tx][ty]] = true;
    }
  }
  for (int i = 0; i < int(10); i++)
    if (!color[i]) return i;
  return -1;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < int(n); i++) {
    char buf[N];
    scanf("%s", buf);
    for (int j = 0; j < int(m); j++)
      if (buf[j] == '#')
        a[i][j] = -2;
      else
        a[i][j] = -1;
  }
  for (int i = 0; i < int(n); i++)
    for (int j = 0; j < int(m); j++) {
      if (a[i][j] != -1 || j + 1 >= m || a[i][j + 1] != -1) continue;
      vector<pair<int, int> > v;
      v.push_back(make_pair((i), (j)));
      v.push_back(make_pair((i), (j + 1)));
      int c = getCol(v);
      a[i][j] = a[i][j + 1] = c;
    }
  for (int i = 0; i < int(n); i++)
    for (int j = 0; j < int(m); j++) {
      if (a[i][j] != -1 || i + 1 >= n || a[i + 1][j] != -1) continue;
      vector<pair<int, int> > v;
      v.push_back(make_pair((i), (j)));
      v.push_back(make_pair((i + 1), (j)));
      int c = getCol(v);
      a[i][j] = a[i + 1][j] = c;
    }
  for (int i = 0; i < int(n); i++)
    for (int j = 0; j < int(m); j++) {
      if (a[i][j] != -1) continue;
      int c = -1;
      for (int k = 0; k < int(4); k++) {
        int tx = i + dx[k], ty = j + dy[k];
        if (!(0 <= (tx) && (tx) < (n) && 0 <= (ty) && (ty) < (m)) ||
            a[tx][ty] == -2)
          continue;
        neib.clear();
        neib.push_back(make_pair((i), (j)));
        u++;
        dfs(tx, ty, a[tx][ty]);
        assert(int((neib).size()) <= 5);
        c = getCol(neib);
        for (int t = 0; t < int(int((neib).size())); t++)
          a[neib[t].first][neib[t].second] = c;
      }
      if (c == -1) {
        puts("-1");
        return 0;
      }
    }
  for (int i = 0; i < int(n); i++) {
    for (int j = 0; j < int(m); j++)
      if (a[i][j] == -2)
        putchar('#');
      else {
        assert(a[i][j] >= 0 && a[i][j] <= 9);
        printf("%d", a[i][j]);
      }
    puts("");
  }
  return 0;
}
