# map(int, input().split())
from bisect import bisect_right

def findPossible(start):


	theno = start[1]+start[0]*m
	possible[theno] = True

	if visited[theno] is True:
		return

	visited[theno] = True


	if start[0] != 0 and a[start[0]-1][start[1]] != '#':
		findPossible([start[0]-1,start[1]])
	
	if start[1] != 0 and a[start[0]][start[1]-1] != '#':
		findPossible([start[0],start[1]-1])
	
	if start[0] != n-1 and a[start[0]+1][start[1]] != '#':
		findPossible([start[0]+1,start[1]])

	if start[1] != m-1 and a[start[0]][start[1]+1] != '#':
		findPossible([start[0],start[1]+1])


	
t = int(input())
# t = 1

for _ in range(t):
	try:
		n, m = input().split()
		n = int(n)
		m = int(m)

		a = []
		G = []
		B = []
		for i in range(n):
			b = input()
			a.append(list(b))
			for j in range(len(b)):
				if b[j] == 'G':
					G.append([i,j])
				if b[j] == 'B':
					B.append([i,j])

		# if len(G) == 0:
		# 	print("Yes")
		# else:

		for point in B:
			if point[0] != 0:
				a[point[0]-1][point[1]] = '#'
			if point[1] != 0:
				a[point[0]][point[1]-1] = '#'
			if point[0] != n-1:
				a[point[0]+1][point[1]] = '#'
			if point[1] != m-1:
				a[point[0]][point[1]+1] = '#'


		# find all paths from end
		possible = [False]*(n*m)
		visited = [False]*(n*m)
		start = [n-1,m-1]

		if a[n-1][m-1] == '#':
			if len(G) == 0:
				print("Yes")
			else:
				print("No")
		else:

			findPossible(start)
			# print(possible)
			sed = 0
			for good in G:
				theno = good[1]+good[0]*m
				if possible[theno] is False:
					sed = 1
					break
			if sed == 0:
				print("Yes")
			else:
				print("No")
	except Exception as e:
		print(str(e))


# try:

	# raise Exception
# except:
	# print("-1")
	


# thenos.sort(key=lambda x: x[2], reverse=True)

# int(math.log(max(numbers)+1,2))
# 2**3 (power)


# a,t = (list(x) for x in zip(*sorted(zip(a, t))))
# 

# to copy lists use .copy()
# pow(p, si, 1000000007) for modular exponentiation	