import sys
import collections as cc
import bisect as bi
sys.setrecursionlimit(10**5)
I=lambda:list(map(int,input().split()))
for tc in range(int(input())):
	n,m=I()
	ar=[]
	g=0
	b=0
	for i in range(n):
		te=list(input())
		ar.append(te)
		g+=te.count('G')
		b+=te.count('B')
	tf=1
	for i in range(n):
		for j in range(m):
			if ar[i][j]=='B':
				x=i
				y=j
				if x+1<n:
					if ar[x+1][y]=='.':
						ar[x+1][y]='#'
					elif ar[x+1][y]=='G':
						tf=0
				if x-1>=0:
					if ar[x-1][y]=='.':
						ar[x-1][y]='#'
					elif ar[x-1][y]=='G':
						tf=0
				if y+1<m:
					if  ar[x][y+1]=='.':
						ar[x][y+1]='#'
					elif ar[x][y+1]=='G':
						tf=0
				if y-1>=0 :
					if  ar[x][y-1]=='.':
						ar[x][y-1]='#'
					elif ar[x][y-1]=='G':
						tf=0

	if g==0:
		print("YES")
	elif not tf:
		print("NO")
	elif tf:
		temp=[[0]*m for i in range(n)]
		def dfs(x,y,temp):
			temp[x][y]='W'
			if x+1<n and temp[x+1][y]==0 and (ar[x+1][y] not in ['#','B']):
				dfs(x+1,y,temp)
			if y+1<m and temp[x][y+1]==0 and (ar[x][y+1] not in ['#','B']):
				dfs(x,y+1,temp)
			if x-1>=0 and temp[x-1][y]==0 and (ar[x-1][y] not in ['#','B']):
				dfs(x-1,y,temp)
			if y-1>=0 and temp[x][y-1]==0 and (ar[x][y-1] not in ['#','B']):
				dfs(x,y-1,temp)
		if ar[n-1][m-1]=='#':
			print('NO')
			continue
		dfs(n-1,m-1,temp)
		ttt=1

		for i in range(n):
			ttt=1
			for j in range(m):
				ttt=1
				if ar[i][j]=='G':
					if temp[i][j]=='W':
						ttt=1
					else:
						ttt=0
						break
			if not ttt:
				break
		if ttt:
			print("YES")
		else:
			print("NO")









