#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;

const int maxn = 2005;
string s[maxn];
string r[maxn];
int col[maxn][maxn];
int n, m;

const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, -1, 0, 1};
void dfs(int x, int y, int c) {
  col[x][y] = c;
  for (int dir = 0; dir < 4; ++dir) {
    int nx = x + dx[dir];
    int ny = y + dy[dir];
    if (nx < 0 || nx >= n || ny < 0 || ny >= m || s[nx][ny] == '.' || col[nx][ny])
      continue;
    dfs(nx, ny, c);
  }
}

const int N = maxn * maxn;
vector<pair<int, int>> g[N];
int dist[N];

priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> o;
void dickstra(int u) {
  for (int i = 0; i < N; ++i) {
    dist[i] = 1e9;
  }
  dist[u] = 0;
  o.emplace(dist[u], u);
  while (!o.empty()) {
    int sdist = o.top().first;
    u = o.top().second;
    o.pop();
    if (sdist != dist[u])
      continue;
    for (auto e : g[u]) {
      int v = e.first;
      int w = e.second;
      int ndist = dist[u] + w;
      if (ndist >= dist[v])
        continue;
      dist[v] = ndist;
      o.emplace(dist[v], v);
    }
  }
}

signed main() {
#ifdef LOCAL
  assert(freopen("c.in", "r", stdin));
#endif
  cin >> n >> m;
  for (int i = 0; i < n; ++i) {
    cin >> s[i];
    r[i] = string(m, '.');
  }
  int cc = 1;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      if (!col[i][j] && s[i][j] == '#')
        dfs(i, j, cc++);
    }
  }
  for (int j = 0; j < m; ++j) {
    int to = 0, dst = -1;
    for (int i = n - 1; i >= 0; --i) {
      ++dst;
      if (s[i][j] == '.')
        continue;
      g[to].emplace_back(col[i][j], dst);
      to = col[i][j];
      dst = -1;
    }
  }
  dickstra(0);
  //for (int i = 0; i < n; ++i) {
    //for (int j = 0; j < m; ++j) {
      //cerr << col[i][j];
    //}
    //cerr << '\n';
  //}
  //for (int i = 0; i < cc; ++i) {
    //cerr << dist[i] << ' ';
  //}
  //cerr << '\n';
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      if (s[i][j] == '#') {
        int c = col[i][j];
        int sh = dist[c];
        assert(i + sh < n && r[i + sh][j] == '.');
        r[i + sh][j] = '#';
      }
    }
  }
  for (int i = 0; i < n; ++i) {
    cout << r[i] << '\n';
  }
}
