
def num_good_guys(grid, n, m):
    res = 0
    for i in range(n):
        for j in range(m):
            if grid[i][j] == 'G':
                res += 1
    return res

def add_neightbor_wall(grid, i, j, n, m):
    if i >= 0 and i < n and j >= 0 and j < m:
        if grid[i][j] == 'G':
            return False
        if grid[i][j] == '.':
            grid[i][j] = '#'
    return True

def add_neightbor_walls(grid, i, j, n, m):

    if not add_neightbor_wall(grid, i-1, j, n, m):
        return False

    if not add_neightbor_wall(grid, i, j-1, n, m):
        return False

    if not add_neightbor_wall(grid, i+1, j, n, m):
        return False

    if not add_neightbor_wall(grid, i, j+1, n, m):
        return False

    return True


def solve_test_case(t):
    n, m = parse_array(int)
    grid = [list(input()) for _ in range(n)]

    n_good_guy = num_good_guys(grid, n, m)

    if n_good_guy == 0:
        print("Yes")
        return

    for i in range(n):
        for j in range(m):
            if grid[i][j] == 'B':
                # Need to put some walls
                if not add_neightbor_walls(grid, i, j, n, m):
                    print("No")
                    return

    if grid[n-1][m-1] == '#':
        print("No")
        return

    reached_good_guys = 0
    queue = [(n-1, m-1)]
    visited = set()
    while len(queue) > 0:
        i, j = queue.pop(0)
        if i >= 0 and i < n and j >= 0 and j < m and (i, j) not in visited and grid[i][j] in ['.', 'G']:
            visited.add((i, j))
            if grid[i][j] == 'G':
                reached_good_guys += 1
            queue.append((i+1, j))
            queue.append((i, j+1))
            queue.append((i-1, j))
            queue.append((i, j-1))
    if reached_good_guys == n_good_guy:
        print("Yes")
    else:
        print("No")




def parse_array(f):
    return list(map(f, input().split()))

def solve():
    T = int(input())

    for t in range(T):
        solve_test_case(t)

if __name__ == "__main__":
    solve()
