#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 6;
int n, m, dx[11] = {1, 1, 1, 0, 0, -1, -1, -1},
          dy[11] = {0, -1, 1, 1, -1, 0, 1, -1};
char s[N][N];
bool check(int x, int y) {
  if (s[x][y] != '*') return 0;
  if (s[x - 1][y] == '.' && s[x - 1][y + 1] == '.' && s[x][y + 1] == '.')
    return 1;
  if (s[x + 1][y] == '.' && s[x + 1][y + 1] == '.' && s[x][y + 1] == '.')
    return 1;
  if (s[x + 1][y] == '.' && s[x + 1][y - 1] == '.' && s[x][y - 1] == '.')
    return 1;
  if (s[x][y - 1] == '.' && s[x - 1][y] == '.' && s[x - 1][y - 1] == '.')
    return 1;
  return 0;
}
void dfs(int x, int y) {
  for (int i = 0; i < 8; i++) {
    int nx = x + dx[i];
    int ny = y + dy[i];
    if (check(nx, ny)) {
      s[nx][ny] = '.';
      dfs(nx, ny);
    }
  }
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%s", s[i] + 1);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      if (check(i, j)) s[i][j] = '.', dfs(i, j);
    }
  }
  for (int i = 1; i <= n; i++) printf("%s\n", s[i] + 1);
  return 0;
}
