package main
import (
"bufio"
"io"
"os"
)
type FastScanner struct {
data []byte
idx int
n int
}
func (fs *FastScanner) skip() {
for fs.idx < fs.n && fs.data[fs.idx] <= ' ' {
fs.idx++
}
}
func (fs *FastScanner) nextInt() int {
fs.skip()
val := 0
for fs.idx < fs.n && fs.data[fs.idx] > ' ' {
val = val*10 + int(fs.data[fs.idx]-'0')
fs.idx++
}
return val
}
func (fs *FastScanner) nextToken() []byte {
fs.skip()
start := fs.idx
for fs.idx < fs.n && fs.data[fs.idx] > ' ' {
fs.idx++
}
return fs.data[start:fs.idx]
}
func main() {
data, _ := io.ReadAll(os.Stdin)
fs := FastScanner{data: data, n: len(data)}
n := fs.nextInt()
m := fs.nextInt()
bad := make([]int, m+1)
var prev []byte
for i := 0; i < n; i++ {
row := fs.nextToken()
if i > 0 {
for j := 0; j+1 < m; j++ {
if row[j] == 'X' && prev[j+1] == 'X' {
bad[j+2] = 1
}
}
}
prev = row
}
pref := make([]int, m+1)
for i := 1; i <= m; i++ {
pref[i] = pref[i-1] + bad[i]
}
q := fs.nextInt()
out := make([]byte, 0, q*4)
for i := 0; i < q; i++ {
l := fs.nextInt()
r := fs.nextInt()
if pref[r]-pref[l] == 0 {
out = append(out, 'Y', 'E', 'S', '\n')
} else {
out = append(out, 'N', 'O', '\n')
}
}
w := bufio.NewWriterSize(os.Stdout, 1<<20)
w.Write(out)
w.Flush()
}