
import sys
sys.setrecursionlimit(100000)
dir =[(-1, 0), (1, 0), (0, -1), (0, 1)]  #Direcciones donde se puede encontrar los adyacentes a una casilla
 
def dfs(i, j): #dfs a partir de la casilla de salida para saber si puede alcanzar a todos los G
    visited[i][j] = True#marcar la casilla como visitada
    for di, dj in dir:#Verificar las posibles direcciones
        if di+i<0 or di+i>=n or dj+j<0 or dj+j>=m:#Ver si al movernos en una direccion nos salimos del mapa
            continue
        if not visited[i + di][j + dj] and maze[i + di][j + dj] != "#":#Nos movemos para la casilla que no hayamos visitado y que no tenga una pared
            dfs(i + di, j + dj)#LLamado recursivo del dfs

t=int(input())#Obtener la cantidad de casos de prueba
for a in range(t):#Ciclo for por cada uno de los casos de prueba
    n, m = list(map(int, input().split()))#Obtenemos los valores de n y m de la entrada
    maze =[list(input())for i in range(n)]#Formamos el laberinto a partir de las lineas de entrada
    answer = True#Determina si va a ser poible o no resolver el problema
    for i in range(0, n):#Este doble for anidado nos permite recorrer cada una de las casillas
        if not answer:
            break
        for j in range(0, m ):
            if not answer:
                break
            if maze[i][j] == "B":#Verificamos si la casilla es B
                for di, dj in dir:#Verificar las posibles direcciones
                    if di+i<0 or di+i>=n or dj+j<0 or dj+j>=m:#Ver si al movernos en una direccion nos salimos del mapa
                        continue
                    if maze[i + di][j + dj] == "G":#Si en alguna direccion adyacente a dicho B hay un G entonces no es posible resolver el problema
                        answer = False
                        break
                    elif maze[i + di][j + dj] != "B":#Verifica ca la casilla este vacia para luego, si lo esta, colocar una pared
                        maze[i + di][j + dj] = "#"

    if answer:
        visited = [[False]*m for i in range(n)]#Creamos una matriz del mismo tamaño del laberinto para marcar los vertices que vayamos visitando en el dfs
        if maze[n-1][m-1] != "#":#Verifica si en la casilla de la salida colocamos una pared, en caso de que no procedemos a realizar el dfs
            dfs(n-1, m-1)
        for i in range(0, n ):#Doble for anidado que nos permite recorrer cada una de las casillas
            for j in range(0, m ):
                if maze[i][j] == "G" and not visited[i][j]:#Si existe algun vertice G que no fue visitado en el recorrido dfs entonces no es posible resolver el problema
                    answer = False
    print("Yes" if answer else "No")#Imprimimos la salida en dependencia de los resultados que almacenamos en answer.
