import math
import sys
from itertools import permutations
from collections import defaultdict 
input = sys.stdin.readline
sys.setrecursionlimit(5000)
# DFS Reference: https://www.geeksforgeeks.org/depth-first-search-or-dfs-for-a-graph/
# ans=[]
# class Graph: 
  
#     # Constructor 
#     def __init__(self): 
  
#         # default dictionary to store graph 
#         self.graph = defaultdict(list) 
  
#     # function to add an edge to graph 
#     def addEdge(self, u, v): 
#         self.graph[u].append(v) 
  
#     # A function used by DFS 
#     def DFSUtil(self, v, visited): 
  
#         # Mark the current node as visited  
#         # and print it 
#         visited[v] = True
#         ans.append(v)
  
#         # Recur for all the vertices  
#         # adjacent to this vertex 
#         for i in self.graph[v]: 
#             if visited[i] == False: 
#                 self.DFSUtil(i, visited) 
  
#     # The function to do DFS traversal. It uses 
#     # recursive DFSUtil() 
#     def DFS(self, v): 
  
#         # Mark all the vertices as not visited 
#         visited = [False] * (max(self.graph)+1) 
  
#         # Call the recursive helper function  
#         # to print DFS traversal 
#         self.DFSUtil(v, visited)  

g=[]
visited=[]
def DFS(v):
    visited[v]=1
    for x in g[v]:
        if visited[x]==0:
           DFS(x)


t=int(input())
for _ in range(t):
    # ans=[]
    
    n,m=map(int,input().split())
    visited=[0]*(n*m)
    arr=[]
    for i in range(n):
        arr.append(list(input()))
        arr[-1]=list(arr[-1])
        if arr[-1][-1]=="\n":
            arr[-1].pop()

    flag=True
    for i in range(n):
        for j in range(m-1):
            if arr[i][j]=="B" and arr[i][j+1]=="G":
                flag=False
                break
            if arr[i][j]=="G" and arr[i][j+1]=="B":
                flag=False
                break
        
        if flag==False:
            break

    for j in range(m):
        for i in range(n-1):
            if arr[i][j]=="B" and arr[i+1][j]=="G":
                flag=False
                break
            if arr[i][j]=="G" and arr[i+1][j]=="B":
                flag=False
                break
        
        if flag==False:
            break
    
    if flag==False:
        print("No")
    
    else:
        Garr=[]
        countG=0
        countB=0
        for i in range(n):
            for j in range(m):
                # print(i,j)
                # print(arr)
                if arr[i][j]=="B":
                    countB+=1
                    if i+1<n and arr[i+1][j]!="B":
                        arr[i+1][j]="#"
                    if j+1<m and arr[i][j+1]!="B":
                        arr[i][j+1]="#"
                    if i>0 and arr[i-1][j]!="B":
                        arr[i-1][j]="#"
                    if j>0 and arr[i][j-1]!="B":
                        arr[i][j-1]="#"
                if arr[i][j]=="G":
                    countG+=1
                    Garr.append(i*m+j)
    
        # g=Graph()
        # for i in range(n):
        #     for j in range(m):
        #         if arr[i][j]!="#":
        #             if i+1<n and arr[i+1][j]!="#":
        #                 g.addEdge(i*m+j,(i+1)*m+j)
        #             if j+1<m and arr[i][j+1]!="#":
        #                 g.addEdge(i*m+j,i*m+j+1)
        #             if i>0 and arr[i-1][j]!="#":
        #                 g.addEdge(i*m+j,(i-1)*m+j)
        #             if j>0 and arr[i][j-1]!="#":
        #                 g.addEdge(i*m+j,i*m+j-1)
        # # print(g)

        # print(g)

        # if countG==0:
        #     print("Yes")
        # elif arr[n-1][m-1]=="#":
        #     print("No")
        # else:
        #     f=True
        #     try:
        #         g.DFS(n*m-1)
        #     except:
        #         f=False
        #         print("No")
        #     # print(ans,Garr)
        #     if f:
        #         if set(ans)&set(Garr)==set(Garr):
        #             print("Yes")
        #         else:
        #             print("No")
        
        g=[]
        for i in range(n):
            for j in range(m):
                g.append([])

        for i in range(n):
            for j in range(m):
                if arr[i][j]!="#":
                    if i+1<n and arr[i+1][j]!="#":
                        g[i*m+j].append((i+1)*m+j)
                        g[(i+1)*m+j].append(i*m+j)
                    if j+1<m and arr[i][j+1]!="#":
                        g[i*m+j].append(i*m+j+1)
                        g[i*m+j+1].append(i*m+j)
                    if i>0 and arr[i-1][j]!="#":
                        g[i*m+j].append((i-1)*m+j)
                        g[(i-1)*m+j].append(i*m+j)
                    if j>0 and arr[i][j-1]!="#":
                        g[i*m+j].append(i*m+j-1)
                        g[i*m+j-1].append(i*m+j)
        
        try:
            DFS(n*m-1)
        except:
            print("Here's the error")
            exit(0)
        ans=[]
        for i in range(n*m):
            if visited[i]==1:
                ans.append(i)
    
        if set(ans)&set(Garr)==set(Garr):
            print("Yes")
        else:
            print("No")
