import sys





Ri = lambda : [int(x) for x in sys.stdin.readline().split()]
ri = lambda : sys.stdin.readline().strip()


def list2d(a, b, c): return [[c] * b for i in range(a)]
def Yes(): print('Yes')
def No(): print('No')

def ok(i,j) : 
    if 0 <= i< n and 0<= j < m:
        return True
    return False


from types import GeneratorType
def bootstrap(func, stack=[]):
    def wrapped_function(*args, **kwargs):
        if stack:
            return func(*args, **kwargs)
        else:
            call = func(*args, **kwargs)
            while True:
                if type(call) is GeneratorType:
                    stack.append(call)
                    call = next(call)
                else:
                    stack.pop()
                    if not stack:
                        break
                    call = stack[-1].send(call)
            return call
    return wrapped_function


@bootstrap
def dfs(i,j):
    vis[i][j] = True
    if  ok(i+1,j) and not vis[i+1][j] and not st[i+1][j] == '#':
        yield dfs(i+1,j)
    if  ok(i-1,j) and not vis[i-1][j] and not st[i-1][j] == '#':
        yield dfs(i-1,j)
    if  ok(i,j+1) and not vis[i][j+1] and not st[i][j+1] == '#':
        yield dfs(i,j+1)
    if  ok(i,j-1) and not vis[i][j-1] and not st[i][j-1] == '#':
        yield dfs(i,j-1)
    yield None
#jflajdsl



''' 
6
1 1
.
1 2
G.
2 2
#B
G.
2 3
G.#
B#.
3 3
#B.
#..
GG.
2 2
#B
B.
'''


for _ in range(int(ri())):
    n,m = Ri()
    st = []
    for i in range(n):
        temp = ri()
        temp = [i for i in temp]
        st.append(temp)
    
    flag = True
    for i in range(n):
        for j in range(m):
            if st[i][j] == 'B' and ok(i+1,j) and st[i+1][j] == 'G':
                flag = False
                break
            if st[i][j] == 'B' and ok(i,j+1) and st[i][j+1] == 'G':
                flag = False
                break
            if st[i][j] == 'B' and ok(i-1,j) and st[i-1][j] == 'G':
                flag = False
                break
            if st[i][j] == 'B' and ok(i,j-1) and st[i][j-1] == 'G':
                flag = False
                break

        if not flag :
            break

    if not flag : 
        # print("fsf")
        No()
    else:
        for i in range(n):
            for j in range(m):
                if st[i][j] == 'B' and ok(i+1,j) and st[i+1][j] == '.':
                    st[i+1][j] = '#'
                    # flag = False
                    # break
                if st[i][j] == 'B' and ok(i,j+1) and st[i][j+1] == '.':
                    st[i][j+1] = '#'
                    # flag = False
                    # break
                if st[i][j] == 'B' and ok(i-1,j) and st[i-1][j] == '.':
                    st[i-1][j] = '#'
                    # flag = False
                    # break
                if st[i][j] == 'B' and ok(i,j-1) and st[i][j-1] == '.':
                    st[i][j-1] = '#'
                    # flag = False
                    # break
        # dp = list2d(n,m,-1)

        

        vis = list2d(n,m,False)
        flag = True
        if st[n-1][m-1] != '#':
            dfs(n-1,m-1)

        for i in range(n):
            for j in range(m):
                if st[i][j] == 'B' and vis[i][j]:
                    flag = False
                    break
                if st[i][j] == 'G' and not vis[i][j] :
                    flag = False
                    break
            if not flag:
                break
        if not flag :
            No()
        else:
            Yes()