#include <bits/stdc++.h>
using namespace std;
template <class _T>
inline _T sqr(const _T& x) {
  return x * x;
}
template <class _T>
inline string tostr(const _T& a) {
  ostringstream os("");
  os << a;
  return os.str();
}
const long double PI = 3.1415926535897932384626433832795;
const long double EPS = 1e-11;
const int dx[4] = {0, -1, 0, 1};
const int dy[4] = {-1, 0, 1, 0};
int n, m, k;
char a[1024][1024];
char a0[1024][1024];
int c[1024][1024];
bool u[1024][1024];
bool u2[12];
void dfs(int x, int y, int px, int py) {
  u[x][y] = true;
  int cnt = 0;
  int t[4] = {0, 1, 2, 3};
  for (int i = 0; i < (int)(4); i++) {
    swap(t[i], t[rand() % 4]);
  }
  for (int l1 = 0; l1 < (int)(4); l1++) {
    int l = t[l1];
    int xn = x + dx[l];
    int yn = y + dy[l];
    if (xn < 0 || xn >= n || yn < 0 || yn >= m || u[xn][yn] || a[xn][yn] == '#')
      continue;
    dfs(xn, yn, x, y);
    if (c[xn][yn] == -1) cnt++;
  }
  if (cnt) {
    for (int l = 0; l < (int)(4); l++) {
      int xn = x + dx[l];
      int yn = y + dy[l];
      if (xn < 0 || xn >= n || yn < 0 || yn >= m || a[xn][yn] == '#' ||
          c[xn][yn] != -1 || (xn == px && yn == py))
        continue;
      c[xn][yn] = k;
    }
    c[x][y] = k++;
  }
}
void dfs2(int x, int y, int col) {
  u[x][y] = true;
  for (int l = 0; l < (int)(4); l++) {
    int xn = x + dx[l];
    int yn = y + dy[l];
    if (xn < 0 || xn >= n || yn < 0 || yn >= m || a[xn][yn] == '#') continue;
    if (c[xn][yn] == col) {
      if (!u[xn][yn]) dfs2(xn, yn, col);
    } else if (a[xn][yn] != '.') {
      u2[a[xn][yn] - '0'] = true;
    }
  }
}
void dfs3(int x, int y, int col, int nc) {
  a[x][y] = '0' + nc;
  c[x][y] = -1;
  for (int l = 0; l < (int)(4); l++) {
    int xn = x + dx[l];
    int yn = y + dy[l];
    if (xn < 0 || xn >= n || yn < 0 || yn >= m || a[xn][yn] == '#') continue;
    if (c[xn][yn] == col) {
      dfs3(xn, yn, col, nc);
    }
  }
}
int check(int x, int y) {
  int ans = 1;
  u[x][y] = true;
  for (int l = 0; l < (int)(4); l++) {
    int xn = x + dx[l];
    int yn = y + dy[l];
    if (xn < 0 || xn >= n || yn < 0 || yn >= m || u[xn][yn] ||
        a[xn][yn] == '#' || a[xn][yn] != a[x][y])
      continue;
    ans += check(xn, yn);
  }
  return ans;
}
int check2(int x, int y) {
  int ans = 1;
  u[x][y] = true;
  for (int l = 0; l < (int)(4); l++) {
    int xn = x + dx[l];
    int yn = y + dy[l];
    if (xn < 0 || xn >= n || yn < 0 || yn >= m || u[xn][yn] ||
        a[xn][yn] == '#' || c[xn][yn] != c[x][y])
      continue;
    ans += check2(xn, yn);
  }
  return ans;
}
int main() {
  cout << setiosflags(ios::fixed) << setprecision(10);
  srand(672465);
  memset(c, 0xff, sizeof(c));
  scanf("%d%d", &n, &m);
  memset((a), 0, sizeof(a));
  for (int i = 0; i < (int)(n); i++) {
    scanf("%s", a[i]);
    a[i][m] = '\0';
  }
  memcpy(a0, a, sizeof(a));
  memset((u), 0, sizeof(u));
  k = 0;
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(m); j++) {
      if (!u[i][j] && a[i][j] != '#') {
        dfs(i, j, -1, -1);
        if (c[i][j] == -1) {
          bool bb = true;
          for (int l = 0; l < (int)(4); l++) {
            int xn = i + dx[l];
            int yn = j + dy[l];
            if (xn < 0 || xn >= n || yn < 0 || yn >= m || a[xn][yn] == '#')
              continue;
            if (c[xn][yn] != -1) {
              c[i][j] = c[xn][yn];
              bb = false;
              break;
            }
          }
          if (bb) {
            puts("-1");
            return 0;
          }
        }
      }
    }
  }
  memset((u), 0, sizeof(u));
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(m); j++) {
      if (!u[i][j] && a[i][j] != '#') {
        int cnt = check2(i, j);
        if (cnt < 2 || cnt > 5) {
        }
      }
    }
  }
  memset((u), 0, sizeof(u));
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(m); j++) {
      if (a[i][j] == '.') {
        memset((u2), 0, sizeof(u2));
        dfs2(i, j, c[i][j]);
        bool bbb = true;
        for (int t = 0; t < (int)(12); t++) {
          if (!u2[t]) {
            dfs3(i, j, c[i][j], t);
            bbb = false;
            break;
          }
        }
        if (bbb) return 1;
      }
    }
  }
  memset((u), 0, sizeof(u));
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(m); j++) {
      if (a0[i][j] == '#') {
        if (a[i][j] != '#') cout << "Botwa ! 1 !" << endl;
      } else {
        if (!isdigit(a[i][j])) cout << "Botwa ! 2 !" << endl;
      }
      if (a[i][j] != '#' && !isdigit(a[i][j]))
        cout << "a[" << i << "][" << j << "] = '" << a[i][j] << "'" << endl;
      if (!u[i][j] && a[i][j] != '#') {
        int cnt = check(i, j);
        if (cnt < 2 || cnt > 5) {
          for (int ii = (-4); ii <= (int)(4); ii++) {
            for (int jj = (-4); jj <= (int)(4); jj++) {
              if (i + ii >= 0 && j + jj >= 0) cout << a[i + ii][j + jj];
            }
            if (i + ii >= 0) cout << endl;
          }
          cout << "? " << cnt << " " << a[i][j] << endl;
        }
      }
    }
  }
  for (int i = 0; i < (int)(n); i++) {
    puts(a[i]);
  }
  return 0;
}
