from collections import deque
def path(i,j):
	queue = [i*m+j]
	queue = deque(queue)
	vis = [0]*(n*m)
	vis[queue[0]] = 1
	while len(queue)!=0:
		e = queue.popleft()
		vis[e] = 1
		for i in graph[e]:
			if vis[i]==0:
				queue.append(i)
				vis[i] = 1
			if i==(n*m-1):
				return True
	return False

for nt in range(int(input())):
	n,m=map(int,input().split())
	maze=[]
	for i in range(n):
		maze.append(list(input()))
	flag = 0
	ans = "Yes"
	for i in range(n):
		for j in range(m):
			if maze[i][j]=="B":
				if i<n-1:
					if maze[i+1][j]=="G":
						flag = 1
						ans = "No"
						break
					maze[i+1][j]="#"
				if j<m-1:
					if maze[i][j+1]=="G":
						flag = 1
						ans = "No"
						break
					maze[i][j+1]="#"
				if i>0:
					if maze[i-1][j]=="G":
						flag = 1
						ans = "No"
						break
					maze[i-1][j]="#"
				if j>0:
					if maze[i][j-1]=="G":
						flag = 1
						ans = "No"
						break
					maze[i][j-1]="#"
				maze[i][j]="#"
		if flag:
			break
	if flag:
		print (ans)
		continue
	# for i in maze:
	# 	print (*i)
	graph = [[] for i in range(n*m)]
	for i in range(n):
		for j in range(m):
			if maze[i][j]!="#":
				if i<n-1 and maze[i+1][j]!="#":
					graph[i*m+j].append((i+1)*m+j)
				if i>0 and maze[i-1][j]!="#":
					graph[i*m+j].append((i-1)*m+j)
				if j<m-1 and maze[i][j+1]!="#":
					graph[i*m+j].append(i*m+j+1)
				if j>0 and maze[i][j-1]!="#":
					graph[i*m+j].append(i*m+j-1)
	# print (graph)
	for i in range(n):
		for j in range(m):
			if maze[i][j]=="G":
				if not path(i,j):
					flag = 1
					ans = "No"
					break
		if flag:
			break
	print (ans)