from collections import defaultdict as dd
import math
import sys
import heapq
import copy
input=sys.stdin.readline
def nn():
	return int(input())

def li():
	return list(input())

def mi():
	return map(int, input().split())

def lm():
	return list(map(int, input().split()))

q= nn()

for _ in range(q):
	n,m = mi()
	maze = []
	for i in range(n):
		row = li()
		maze.append(row)
	#print(maze)
	bad = False
	goods = []
	for i in range(n):
		for j in range(m):
			if maze[i][j]=="G":
				goods.append((i,j))
			if maze[i][j]=="B":
				for r in (-1,0,1):
					for c in (-1,0 ,1):
						if r==0 or c==0:
							if 0 <= i+r and i+r<n:
								if 0<=j+c and j+c<m:
									if maze[i+r][j+c]=="G":
										bad = True
									if maze[i+r][j+c]==".":
										maze[i+r][j+c]="#"
	#print(maze)
	safes = set()
	safes.add((n-1,m-1))
	bads = set()
	for good in goods:
		visited = set()

		s = [good]
		found=False
		while s:
			i,j = s.pop()
			visited.add((i,j))
			if (i,j) in safes:
				for el in visited:
					safes.add(el)
				found=True
				break
			for r in (-1,0,1):
				for c in (-1,0,1):
					if 0 <= i+r and i+r<n:
						if 0<=j+c and j+c<m:
							if r==0 or c==0:
								if maze[i+r][j+c]=="." or maze[i+r][j+c]=="G":
									if (i+r,j+c) not in visited:
										s.append((i+r,j+c))
		if not found:
			bad = True
			break
		#print(visited)
	if bad:
		print("NO")
	else:
		print("YES")
