#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<string> area;
bool explr[1000][1000];
pair<int, int> mov[4] = {make_pair(1, 0), make_pair(0, 1), make_pair(-1, 0),
                         make_pair(0, -1)};
pair<int, int> operator+(pair<int, int> l, pair<int, int> r) {
  return make_pair(l.first + r.first, l.second + r.second);
}
bool valid(pair<int, int> pos) {
  return pos.first >= 0 && pos.first < n && pos.second >= 0 && pos.second < m;
}
void paint(vector<pair<int, int> > pts) {
  vector<bool> colors(10, true);
  for (auto curpt : pts)
    for (auto curmove : mov) {
      auto next = curpt + curmove;
      if (valid(next) && area[next.first][next.second] >= '0' &&
          area[next.first][next.second] <= '9')
        colors[area[next.first][next.second] - '0'] = false;
    }
  int color = 0;
  while (color < 10 && !colors[color]) color++;
  for (auto pt : pts) area[pt.first][pt.second] = color + '0';
}
pair<bool, vector<pair<int, int> > > dfs(pair<int, int> pos) {
  pair<bool, vector<pair<int, int> > > ret;
  vector<pair<bool, vector<pair<int, int> > > > subs;
  bool singleSubs = false;
  ret.first = true;
  ret.second.push_back(pos);
  for (auto curMove : mov) {
    auto next = pos + curMove;
    if (valid(next) && !explr[next.first][next.second] &&
        area[next.first][next.second] == '.') {
      explr[next.first][next.second] = true;
      subs.push_back(dfs(next));
      if (subs.back().second.size() == 1) {
        if (singleSubs == true) ret.first = false;
        singleSubs = true;
      }
    }
  }
  if (singleSubs) {
    for (auto &c : subs) {
      if (c.second.size() == 1)
        ret.second.insert(ret.second.end(), c.second.begin(), c.second.end());
      else {
        paint(vector<pair<int, int> >(c.second.begin(), c.second.end()));
      }
    }
  } else if (subs.size() > 0) {
    if (subs[0].second.size() > 2 && subs[0].first) {
      paint(vector<pair<int, int> >(subs[0].second.begin(),
                                    subs[0].second.end()));
      subs[0].second.erase(subs[0].second.begin() + 1, subs[0].second.end());
    }
    ret.second.insert(ret.second.end(), subs[0].second.begin(),
                      subs[0].second.end());
    for (size_t i = 1; i < subs.size(); i++) {
      paint(vector<pair<int, int> >(subs[i].second.begin(),
                                    subs[i].second.end()));
    }
  }
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m;
  area.resize(n);
  for (int i = 0; i < n; i++) cin >> area[i];
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (!explr[i][j] && area[i][j] == '.') {
        explr[i][j] = true;
        auto left = dfs(make_pair(i, j)).second;
        if (left.size() == 1) {
          cout << "-1\n";
          return 0;
        }
        paint(vector<pair<int, int> >(left.begin(), left.end()));
      }
  for (auto c : area) cout << c << '\n';
  return 0;
}
