← Home
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()
}