from bisect import bisect_left as bl
from bisect import bisect_right as br
from heapq import heappush,heappop
import math
from collections import *
from functools import reduce,cmp_to_key,lru_cache
from itertools import *
import io, os
input = io.BytesIO(os.read(0,os.fstat(0).st_size)).readline
# import sys
# input = sys.stdin.readline

M = mod = 10**9 + 7 
def factors(n):return sorted(set(reduce(list.__add__, ([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0))))
def inv_mod(n):return pow(n, mod - 2, mod)

def li():return [int(i) for i in input().rstrip().split()]
def st():return str(input().rstrip())[2:-1]
def val():return int(input().rstrip())
def li2():return [str(i)[2:-1] for i in input().rstrip().split()]
def li3():return [int(i) for i in st()]

l = []
n = m = 0
change = [(1,0),(-1,0),(0,1),(0,-1)]


for _ in range(val()):
    n,m = li()
    l = []
    ans = 'YES'
    for i in range(n):l.append(list(st()))




    for i in range(n):
        for j in range(m):
            if l[i][j] == 'B':
                for dx,dy in change:
                    x,y = i + dx,j + dy
                    if 0<=x<n and 0<=y<m and l[x][y]== '.':
                        l[x][y] = '#'



    # for i in l:print(*i)

    dp = [[0]*m for i in range(n)]

    d = deque()
    if l[-1][-1] != '#':d.append([n-1,m-1])
    visited = {}
    while d:
        x,y = d.popleft()
        if (x,y) in visited:continue
        visited[(x,y)] = 1
        dp[x][y] = 1
        for dx,dy in change:
            i,j = x+dx,y+dy
            if 0<=i<n and 0<=j<m and (i,j) not in visited and l[i][j] != '#':
                d.append([i,j])
        
    for i in range(n):
        for j in range(m):
                if dp[i][j] and l[i][j] == 'B':
                    ans = 'NO'
                if not dp[i][j] and l[i][j] == 'G':ans = 'NO'

    print(ans)