from collections import *
from itertools import *
from string import *
from bisect import *
from queue import *
from heapq import *
from math import *
from sys import *
from re import *
def fast(): return stdin.readline().strip()
def zzz(): return [int(i) for i in fast().split()]


z, zz = input, lambda: list(map(int, z().split()))
szz, graph, mod, szzz = lambda: sorted(
    zz()), {}, 10**9 + 7, lambda: sorted(zzz())


def lcd(xnum1, xnum2): return (xnum1 * xnum2 // gcd(xnum1, xnum2))
def output(answer): stdout.write(str(answer))


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

###########################---Test-Case---#################################
"""

  If you Know me , Then you probably don't know me !


"""
###########################---START-CODING---##############################


num = int(z())

for _ in range(num):
    n, m = zzz()
    lst = []
    for i in range(n):
        lst.append(list(fast()))
    g_cnt = 0
    g_vis = 0
    for i in range(n):
        for j in range(m):
            c = lst[i][j]
            if c == "G":
                g_cnt += 1
            elif c == "B":
                for d in range(4):
                    x, y = i + dx[d], j + dy[d]
                    if 0 <= x < n and 0 <= y < m:
                        if lst[x][y] == ".":
                            lst[x][y] = "#"
    vis = [[False] * m for _ in " " * n]
  
    stack = []
    if lst[n - 1][m - 1] != "#":
        stack.append((n - 1, m - 1))
        vis[n-1][m-1]=True
    ans=True

    while stack:
        x,y = stack.pop()

        if lst[x][y]=="B":
            ans=False
            break
        if lst[x][y]=="G":
            g_vis+=1

        for i in range(4):
            a,b=x+dx[i],y+dy[i]
            if 0<=a<n and 0<=b<m:
                if not vis[a][b] and lst[a][b]!="#":
                    vis[a][b]=True
                    stack.append((a,b))


    print("Yes" if  ans and g_vis==g_cnt else "No")






