dx = [0,0,1,-1]
dy = [1,-1,0,0]

def valid(i,j,arr,vis):
	if( i>=0 and i<n and j>=0 and j<m and vis[i][j]==False and arr[i][j]!='#' and arr[i][j]!='B'):
		return True
	else:
		return False

def bfs(elei,elej,mat,vis):
	q = []
	q.append([elei,elej])
	while(q!=[]):
		u = q[0] 
		q.pop(0)
		vis[u[0]][u[1]] = True
		for i in range(4):
			newx = u[0]+dx[i]
			newy = u[1]+dy[i]
			if(valid(newx,newy,mat,vis)):
				q.append([newx,newy])
				vis[newx][newy] = True

for _ in range(int(input())):
	n,m = list(map(int,input().split()))
	vis = [[False for i in range(m)]for j in range(n)]
	mat = [[0 for i in range(m)]for j in range(n)]
	goo = []
	ba = []
	for i in range(n):
		s = input()
		for j in range(m):
			mat[i][j] = s[j]
			if(mat[i][j]=='G'):
				goo.append([i,j])
			elif mat[i][j]=='B':
				ba.append([i,j])
	if goo==[]:
		print("Yes")
	else:
		bfs(n-1,m-1,mat,vis)
		ag = 1
		for g in goo:
			if vis[g[0]][g[1]]==False:
				ag = 0
		if ag==0:
			print("No")
		else:
			vis = [[False for i in range(m)]for j in range(n)]
			ok = 1
			for b in ba:
				for i in range(4):
					newx = b[0]+dx[i]
					newy = b[1]+dy[i]
					if(valid(newx,newy,mat,vis)):
						if(mat[newx][newy]=='G' or newx==n-1 and newy==m-1):
							ok = 0
						elif mat[newx][newy]=='.':
							mat[newx][newy] = '#'
			if(ok==0):
				print("No")
			else:
				bfs(n-1,m-1,mat,vis)
				ag = 1
				for g in goo:
					if vis[g[0]][g[1]]==False:
						ag = 0
				if ag==0:
					print("No")
				else:
					print("Yes")