######################################################
############Created by Devesh Kumar###################
#############devesh1102@gmail.com####################
##########For CodeForces(Devesh1102)#################
#####################2020#############################
######################################################
import sys
input = sys.stdin.readline
 #qn given an arr of size n for every  i position find a min j such that j>i and arr[j]>arr[i]
#it prints the position of the nearest .
# import sys
import heapq 
import copy
import math
#heapq.heapify(li) 
#
#heapq.heappush(li,4) 
#
#heapq.heappop(li)
#
# &	Bitwise AND Operator	10 & 7 = 2
# |	Bitwise OR Operator	10 | 7 = 15
# ^	Bitwise XOR Operator	10 ^ 7 = 13

# <<	Bitwise Left Shift operator	10<<2 = 40
# >>	Bitwise Right Shift Operator
'''############ ---- Input Functions ---- #######Start#####'''
def inp():
	return(int(input()))
def inlt(): 
	return(list(map(int,input().split())))
def insr():
	s = input()
	return(list(s[:len(s) - 1]))
def invr():
	return(map(int,input().split()))
 ############ ---- Input Functions ---- #######End
 # #####   

class Node:
    def _init_(self,val):
        self.data = val
        self.left = None
        self.right = None
##to initialize wire : object_name= node(val)##to create a new node
## can also be used to create linked list


def pre_sum(arr):
	#"""returns the prefix sum inclusive ie ith position in ans  represent sum from 0 to ith position"""
	p = [0]
	for i in arr:
		p.append(p[-1] + i)
	p.pop(0)
	return p

def pre_back(arr):
	#"""returns the prefix sum inclusive ie ith position in ans  represent sum from 0 to ith position"""
	p = [0]
	for i in arr:
		p.append(p[-1] + i)
	p.pop(0)
	return p
def bin_search(arr,l,r,val):#strickly greater
	if arr[r] <= val:
		return r+1	
	if r-l < 2:
		if arr[l]>val:
			return l
		else:
			return r
	mid = int((l+r)/2)
	if arr[mid] <= val:
		return bin_search(arr,mid,r,val)
	else:
		return bin_search(arr,l,mid,val)
def search_leftmost(arr,val):
	def helper(arr,l,r,val):
		# print(arr)
		print(l,r)
		if arr[l] == val:
			return l
		if r -l <=1:
			if arr[r] == val:
				return r
			else:
				print("not found")
				return
		mid = int((r+l)/2)
		if arr[mid] >= val:
			return helper(arr,l,mid,val)
		else:
			return helper(arr,mid,r,val)
	return helper(arr,0,len(arr)-1,val)
def search_rightmost(arr,val):
	def helper(arr,l,r,val):
		# print(arr)
		print(l,r)
		if arr[r] == val:
			return r
		if r -l <=1:
			if arr[l] == val:
				return r
			else:
				print("not found")
				return
		mid = int((r+l)/2)
		if arr[mid] > val:
			return helper(arr,l,mid,val)
		else:
			return helper(arr,mid,r,val)
	return helper(arr,0,len(arr)-1,val)


def pr_list(a):
	print(*a, sep=" ")
def main():
	tests =  inp()
	# tests = 1
	mod = 1000000007

	limit = 10**18
	for test in range(tests):
		[n,m] = inlt()
		maze = []
		for i in range(n):
			maze.append(insr())
		# 	maze[-1] = ['#'] + maze[-1] + ['#'] 
		# maze = []
		good = {}
		flag = 0
		for i in range(n):
			for j in range(m):
				if maze[i][j] == "G":
					good[(i,j)] = 1
				elif maze[i][j] == "B":
					if i + 1 < n :
						if maze[i+1] [j]== "G":
							flag = 1
						elif maze[i+1][j] != "B":
							maze[i+1] [j] = "#"

					if j + 1 < m :
						if maze[i] [j+1]== "G":
							flag = 1
						elif maze[i][j+1] != "B":
							maze[i] [j+1] = "#"

					if i - 1 >= 0 :
						if maze[i-1] [j]== "G":
							flag = 1
						elif maze[i-1][j] != "B":
							maze[i-1] [j] = "#"

					if j - 1 >= 0 :
						if maze[i] [j-1]== "G":
							flag = 1
						elif maze[i][j-1] != "B":
							maze[i] [j-1] = "#"	
		if good =={}:
			print("Yes")
			continue
		if flag == 1 or maze[n-1][m-1] == "#" or maze[n-1][m-1] == "B" :
			print("No")
			continue
		flag = 0
		queue = [(n-1,m-1)]
		done = [[0 for i in range(m)] for j in range(n)]
		done [-1][-1] =1
		if (n-1,m-1) in good:
			del good[(n-1,m-1)]
		while(queue!= []):
			# print(queue)
			curr = queue.pop(0)
			i = curr[0]
			j = curr[1]
			if (i,j) in good:
				del good[(i,j)]
			if i-1 >= 0 and  maze[i-1][j] != "#" and done[i-1][j] ==0:
				queue.append((i-1,j))
				done[i-1][j] = 1
			if j-1 >= 0 and  maze[i][j-1] != "#" and done[i][j-1] ==0 :
				queue.append((i,j-1))
				done[i][j-1] = 1
			if i+1 < n and  maze[i+1][j] != "#" and done[i+1][j] ==0:
				queue.append((i+1,j))
				done[i+1][j] =1
			if j+1 < m and maze[i][j+1] != "#" and done[i][j+1] ==0:
				queue.append((i,j+1))
				done[i][j+1] = 1
		if good != {}:
			print("No")
		else:
			print("Yes")
			

			

					

		

		# print(x_values)
		
		# for i in range(x):
		# 	if int(x_values[i])!=1:
		# 		n_new = i+1 + (n-i-1)*int(x_values[i])
		# 		n = n_new%mod
		# print(n)
				
			
		




if __name__== "__main__":
  main()