#include <bits/stdc++.h>
#pragma comment(linker, "/stack:102400000,102400000")
using namespace std;
int lowbit(int x) { return (x & -x); }
template <class T_>
T_ f_abs(T_ x) {
  return x < 0 ? -x : x;
}
template <class T_>
T_ f_max(T_ a, T_ b) {
  return a > b ? a : b;
}
template <class T_>
T_ f_min(T_ a, T_ b) {
  return a < b ? a : b;
}
template <class T_>
T_ gcd(T_ a, T_ b) {
  while (T_ t = a % b) a = b, b = t;
  return b;
}
template <class T_>
void f_swap(T_ &a, T_ &b) {
  T_ t = a;
  a = b;
  b = t;
}
const double eps = 1e-9;
const int dx[] = {-1, 1, 0, 0, -1, -1, 1, 1},
          dy[] = {0, 0, -1, 1, -1, 1, -1, 1};
const int inf = 0x7fffffff;
const int mod = 1000000007;
const int N = 2003;
int n, m;
char mp[N][N];
bool vis[N][N];
queue<int> que;
void Init() {
  while (!que.empty()) que.pop();
  memset(vis, false, sizeof(vis));
}
void GetData() {
  for (int i = 0; i < n; ++i) {
    scanf("%s", mp[i]);
    for (int j = 0; j < m; ++j) {
      if (mp[i][j] == '.') {
        que.push(i * m + j);
        vis[i][j] = true;
      }
    }
  }
}
bool In(int x, int y) { return 0 <= x && x < n && 0 <= y && y < m; }
void Bfs() {
  int x, y;
  while (!que.empty()) {
    x = que.front() / m;
    y = que.front() % m;
    que.pop();
    if (In(x, y - 1) && In(x - 1, y) && mp[x][y - 1] == '.' &&
        mp[x - 1][y - 1] == '*' && mp[x - 1][y] == '.') {
      if (!vis[x - 1][y - 1]) {
        que.push((x - 1) * m + y - 1);
        mp[x - 1][y - 1] = '.';
      }
    }
    if (In(x - 1, y) && In(x, y + 1) && mp[x - 1][y] == '.' &&
        mp[x - 1][y + 1] == '*' && mp[x][y + 1] == '.') {
      if (!vis[x - 1][y + 1]) {
        que.push((x - 1) * m + y + 1);
        mp[x - 1][y + 1] = '.';
      }
    }
    if (In(x, y - 1) && In(x + 1, y) && mp[x][y - 1] == '.' &&
        mp[x + 1][y - 1] == '*' && mp[x + 1][y] == '.') {
      if (!vis[x + 1][y - 1]) {
        que.push((x + 1) * m + y - 1);
        mp[x + 1][y - 1] = '.';
      }
    }
    if (In(x + 1, y) && In(x, y + 1) && mp[x + 1][y] == '.' &&
        mp[x + 1][y + 1] == '*' && mp[x][y + 1] == '.') {
      if (!vis[x + 1][y + 1]) {
        que.push((x + 1) * m + y + 1);
        mp[x + 1][y + 1] = '.';
      }
    }
    if (In(x, y - 1) && In(x - 1, y) && mp[x][y - 1] == '.' &&
        mp[x - 1][y - 1] == '.' && mp[x - 1][y] == '*') {
      if (!vis[x - 1][y]) {
        que.push((x - 1) * m + y);
        mp[x - 1][y] = '.';
      }
    }
    if (In(x - 1, y) && In(x, y - 1) && mp[x - 1][y] == '.' &&
        mp[x - 1][y - 1] == '.' && mp[x][y - 1] == '*') {
      if (!vis[x][y - 1]) {
        que.push(x * m + y - 1);
        mp[x][y - 1] = '.';
      }
    }
    if (In(x - 1, y) && In(x, y + 1) && mp[x - 1][y] == '.' &&
        mp[x][y + 1] == '*' && mp[x - 1][y + 1] == '.') {
      if (!vis[x][y + 1]) {
        que.push(x * m + y + 1);
        mp[x][y + 1] = '.';
      }
    }
    if (In(x - 1, y) && In(x, y + 1) && mp[x - 1][y] == '*' &&
        mp[x][y + 1] == '.' && mp[x - 1][y + 1] == '.') {
      if (!vis[x - 1][y]) {
        que.push((x - 1) * m + y);
        mp[x - 1][y] = '.';
      }
    }
    if (In(x, y - 1) && In(x + 1, y) && mp[x][y - 1] == '*' &&
        mp[x + 1][y] == '.' && mp[x + 1][y - 1] == '.') {
      if (!vis[x][y - 1]) {
        que.push(x * m + y - 1);
        mp[x][y - 1] = '.';
      }
    }
    if (In(x, y - 1) && In(x + 1, y) && mp[x][y - 1] == '.' &&
        mp[x + 1][y] == '*' && mp[x + 1][y - 1] == '.') {
      if (!vis[x + 1][y]) {
        que.push((x + 1) * m + y);
        mp[x + 1][y] = '.';
      }
    }
    if (In(x + 1, y) && In(x, y + 1) && mp[x + 1][y] == '*' &&
        mp[x][y + 1] == '.' && mp[x + 1][y + 1] == '.') {
      if (!vis[x + 1][y]) {
        que.push((x + 1) * m + y);
        mp[x + 1][y] = '.';
      }
    }
    if (In(x + 1, y) && In(x, y + 1) && mp[x + 1][y] == '.' &&
        mp[x][y + 1] == '*' && mp[x + 1][y + 1] == '.') {
      if (!vis[x][y + 1]) {
        que.push(x * m + y + 1);
        mp[x][y + 1] = '.';
      }
    }
  }
}
void Solve() {
  Bfs();
  for (int i = 0; i < n; ++i) printf("%s\n", mp[i]);
}
int main() {
  while (~scanf("%d%d", &n, &m)) {
    Init();
    GetData();
    Solve();
  }
  return 0;
}
