import sys
import math
 
sys.setrecursionlimit(1000000) #设置最大递归深度
int1 = lambda x: int(x) - 1 #返回x-1
p2D = lambda x: print(*x, sep="\n") #输出多个元素，以换行符分割
p2S = lambda x: print(*x, sep=" ") #输出多个元素，以空格分割
def II(): return int(sys.stdin.readline()) #读一行（仅一个）整数
def MI(): return map(int, sys.stdin.readline().split()) #读一行数据，转化为int型元组
def LI(): return list(map(int, sys.stdin.readline().split())) #读一行数据，转化为int型列表
def LLI(rows_number): return [LI() for _ in range(rows_number)] 
def SI(): return sys.stdin.readline()[:-1] #读一行字符串，舍掉换行符

  # 好人G = 2  坏人B = 3  墙# = 1  空气. = 0 
Canlevel = True
Gnum = 0

def check(s, tag, ns, ms, n, m, f = 'None'):
    if n < 0 or n >= ns or m < 0 or m >= ms:
        return
    elif s[n][m] == 1 or tag[n][m] == True:
        return
    elif s[n][m] == 0:
        s[n][m] = 1
        tag[n][m] = True
    elif s[n][m] == 3:
        tag[n][m] = True
        if f != 'Up':
            check(s, tag, ns, ms, n + 1, m, 'Down')
        if f != 'Down':
            check(s, tag, ns, ms, n - 1, m, 'Up')
        if f != 'Right':
            check(s, tag, ns, ms, n, m + 1, 'Left')
        if f != 'Left':
            check(s, tag, ns, ms, n, m - 1, 'Right')
    elif s[n][m] == 2:
        tag[n][m] = True
        global Canlevel
        Canlevel = False
        return

def level(s, t, ns, ms, n, m, f = 'None'):
    if n < 0 or n >= ns or m < 0 or m >= ms:
        return
    elif s[n][m] == 1 or t[n][m] == True:
        return
    elif s[n][m] == 3:
        global Canlevel
        Canlevel = False
        return
    elif s[n][m] == 0 or s[n][m] == 2:
        t[n][m] = True
        if s[n][m] == 2:
            global Gnum
            Gnum += 1
        if f != 'Up':
            level(s, t, ns, ms, n + 1, m, 'Down')
        if f != 'Down':
            level(s, t, ns, ms, n - 1, m, 'Up')
        if f != 'Right':
            level(s, t, ns, ms, n, m + 1, 'Left')
        if f != 'Left':
            level(s, t, ns, ms, n, m - 1, 'Right')


def main():
        _v_ = II()
        for __ in range(_v_):
            global Canlevel, Gnum
            Canlevel = True
            Gnum = 0
            allG = 0
            n, m = MI()
            s = []
            sn = []
            tag = []
            taglevel = []
            for i in range(n):
                s.append(SI())
                tag.append([])
                taglevel.append([])
                for j in range(m):
                    tag[i].append(False)
                    taglevel[i].append(False)
            for i in range(n):
                sn.append([])
                for j in range(m):
                    if s[i][j] == '.':
                        sn[i].append(0)
                    if s[i][j] == '#':
                        sn[i].append(1)
                    if s[i][j] == 'G':
                        sn[i].append(2)
                        allG += 1
                    if s[i][j] == 'B':
                        sn[i].append(3)
            for i in range(n):
                for j in range(m):
                    if sn[i][j] == 3 and tag[i][j] == False:
                        check(sn, tag, n, m, i, j)

            level(sn, taglevel, n, m, n - 1, m - 1)
            if Canlevel == False:
                print('No')
            elif Gnum == allG:
                print('Yes')
            else:
                print('No')

       
main()



'''
1
7 10
..##.#G..B
G..#B..G..
G........B
......##.B
.###..B.BB
........##
..........

'''