import bisect
import heapq
import math
import collections
import sys
import copy
from functools import reduce
import decimal
from io import BytesIO, IOBase
import os

sys.setrecursionlimit(10 ** 9)
decimal.getcontext().rounding = decimal.ROUND_HALF_UP

graphDict = collections.defaultdict
queue = collections.deque


################## Graphs ###################
class Graphs:
    def __init__(self):
        self.graph = graphDict(list)

    def add_edge(self, u, v):
        self.graph[u].append(v)
        self.graph[v].append(u)

    def dfs_utility(self, nodes, visited_nodes):
        visited_nodes.add(nodes)
        print(nodes, end="")
        for neighbour in self.graph[nodes]:
            if neighbour not in visited_nodes:
                self.dfs_utility(neighbour, visited_nodes)

    def dfs(self, node):
        Visited = set()
        self.dfs_utility(node, Visited)

    def bfs(self, node):
        visited = set()
        if node not in visited:
            queue.append(node)
            visited.add(node)
        while queue:
            parent = queue.popleft()
            print(parent)
            for item in self.graph[parent]:
                if item not in visited:
                    queue.append(item)
                    visited.add(item)


#################### Tree Implementaion ##############
class Tree:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None


def inorder(node):
    if node:
        inorder(node.left)
        print(node.data)
        inorder(node.right)


def leaf_node_sum(root):
    if root is None:
        return 0
    if root.left is None and root.right is None:
        return root.data
    return leaf_node_sum(root.left) + leaf_node_sum(root.right)


def hight(root):
    if root is None:
        return -1
    if root.left is None and root.right is None:
        return 0
    return max(hight(root.left), hight(root.right)) + 1


#################################################

def rounding(n):
    return int(decimal.Decimal(f'{n}').to_integral_value())


def factors(n):
    return set(reduce(list.__add__,
                      ([i, n // i] for i in range(1, int(n ** 0.5) + 1) if n % i == 0)))


################################ <fast I/O> ###########################################
BUFSIZE = 8192


class FastIO(IOBase):
    newlines = 0

    def __init__(self, file):
        self._fd = file.fileno()
        self.buffer = BytesIO()
        self.writable = "x" in file.mode or "r" not in file.mode
        self.write = self.buffer.write if self.writable else None

    def read(self):
        while True:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            if not b:
                break
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines = 0
        return self.buffer.read()

    def readline(self):
        while self.newlines == 0:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            self.newlines = b.count(b"\n") + (not b)
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines -= 1
        return self.buffer.readline()

    def flush(self):
        if self.writable:
            os.write(self._fd, self.buffer.getvalue())
            self.buffer.truncate(0), self.buffer.seek(0)


class IOWrapper(IOBase):
    def __init__(self, file):
        self.buffer = FastIO(file)
        self.flush = self.buffer.flush
        self.writable = self.buffer.writable
        self.write = lambda s: self.buffer.write(s.encode("ascii"))
        self.read = lambda: self.buffer.read().decode("ascii")
        self.readline = lambda: self.buffer.readline().decode("ascii")


sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)


#############################################<I/O Region >##############################################


def inp():
    return sys.stdin.readline().strip()


def map_inp(v_type):
    return map(v_type, inp().split())


def list_inp(v_type):
    return list(map_inp(v_type))


######################################## Solution ####################################
def flood_fill(r, c, color):
    visit = [(r, c)]
    while visit:
        rr, cc = visit.pop()
        if rr < 0 or rr > n - 1 or cc < 0 or cc > m - 1 or arr[rr][cc] == "#" or arr[rr][cc] == "G" or visited[rr][cc]:
            continue
        if arr[rr][cc] == ".":
            arr[rr][cc] = "#"
            continue
        else:
            visited[rr][cc] = True
            visit.append((rr + 1, cc))
            visit.append((rr - 1, cc))
            visit.append((rr, cc + 1))
            visit.append((rr, cc - 1))


def bfs(r, c):
    global count
    visit = queue([(r, c)])
    while visit:
        rr, cc = visit.popleft()
        if rr < 0 or rr > n - 1 or cc < 0 or cc > m - 1 or arr[rr][cc] == "#" or arr[rr][cc] == "B" or visited[rr][cc]:
            continue
        if arr[rr][cc] == "G":
            count -= 1
        visited[rr][cc] = True
        visit.append((rr + 1, cc))
        visit.append((rr - 1, cc))
        visit.append((rr, cc + 1))
        visit.append((rr, cc - 1))


for _ in range(int(inp())):
    n, m = map_inp(int)
    arr = []
    for i in range(n):
        arr.append(list(inp()))

    visited = [[False for col in range(m)] for row in range(n)]
    count = 0
    for i in range(n):
        for j in range(m):
            if not visited[i][j] and arr[i][j] == "B":
                flood_fill(i, j, arr[i][j])
            if arr[i][j] == "G":
                count += 1
    bfs(n - 1, m - 1)
    if count == 0:
        print("YES")
    else:
        print("NO")
