← Home
package main

import (
	"bufio"
	"io"
	"os"
)

type FastScanner struct {
	data []byte
	idx  int
}

func NewFastScanner() *FastScanner {
	b, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: b}
}

func (fs *FastScanner) skip() {
	for fs.idx < len(fs.data) && fs.data[fs.idx] <= ' ' {
		fs.idx++
	}
}

func (fs *FastScanner) nextInt() int {
	fs.skip()
	x := 0
	for fs.idx < len(fs.data) && fs.data[fs.idx] > ' ' {
		x = x*10 + int(fs.data[fs.idx]-'0')
		fs.idx++
	}
	return x
}

func (fs *FastScanner) nextBytes() []byte {
	fs.skip()
	start := fs.idx
	for fs.idx < len(fs.data) && fs.data[fs.idx] > ' ' {
		fs.idx++
	}
	return fs.data[start:fs.idx]
}

func main() {
	fs := NewFastScanner()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	t := fs.nextInt()
	for ; t > 0; t-- {
		n := fs.nextInt()
		m := fs.nextInt()

		g := make([][]byte, n)
		for i := 0; i < n; i++ {
			g[i] = fs.nextBytes()
		}

		ans := make([][]byte, n)
		for i := 0; i < n; i++ {
			ans[i] = make([]byte, m)
			for j := 0; j < m; j++ {
				ans[i][j] = '.'
			}
		}

		start := 0
		if n%3 == 0 {
			start = 1
		}

		full := make([]bool, n)
		for r := start; r < n; r += 3 {
			full[r] = true
			for j := 0; j < m; j++ {
				ans[r][j] = 'X'
			}
		}

		for i := 0; i < n; i++ {
			if full[i] {
				continue
			}
			for j := 0; j < m; j++ {
				if g[i][j] == 'X' {
					ans[i][j] = 'X'
				}
			}
		}

		for r := start; r+3 < n; r += 3 {
			c := -1
			for j := 0; j < m; j++ {
				if g[r+1][j] == 'X' || g[r+2][j] == 'X' {
					c = j
					break
				}
			}
			if c == -1 {
				c = 0
			}
			ans[r+1][c] = 'X'
			ans[r+2][c] = 'X'
		}

		for i := 0; i < n; i++ {
			out.Write(ans[i])
			out.WriteByte('\n')
		}
	}
}