from sys import stdin, stdout

class SOLVE:
    dirx = [1, 0, -1,  0]
    diry = [0, 1,  0, -1]
    n = m = None
    
    def bfs(self, src, graph, vis, cmd):
        good_cnt = 0
        
        if graph[src[0]][src[1]] == '#':
            return 0
        
        vis[src[0]][src[1]] = 1
        queue = [src]
        while(len(queue)):
            u = queue[0]
            del queue[0]
            
            for i in range(4):
                tmpx = u[0] + self.dirx[i]
                tmpy = u[1] + self.diry[i]
                if 0<=tmpx<=self.n-1 and 0<=tmpy<=self.m-1 and vis[tmpx][tmpy] == 0 and graph[tmpx][tmpy] != '#':
                    vis[tmpx][tmpy] = 1
                    
                    if cmd == 'block_bad':
                        if graph[tmpx][tmpy] == '.':
                            graph[tmpx][tmpy] = '#'
                        else:
                            queue.append((tmpx, tmpy))
                    elif cmd == 'escape_good':
                        if graph[tmpx][tmpy] == 'G':
                            good_cnt += 1
                        queue.append((tmpx, tmpy))
                        
        if cmd == 'escape_good':
            return good_cnt
                    
        return 0
    
    def solve(self):
        R = stdin.readline
        #f = open('input.txt');R = f.readline
        W = stdout.write
        
        ans = []
        
        for i in range(int(R())):
            self.n, self.m = [int(x) for x in R().split()]
            
            graph = []
            for j in range(self.n):
                graph.append(list(R()))
            
            bad_p    = [] # bad position
            good_cnt = 0  # good count
            for j in range(self.n):
                for k in range(self.m):
                    if graph[j][k] == 'B':
                        bad_p.append((j, k))
                    elif graph[j][k] == 'G':
                        good_cnt += 1
            
            vis = [[0 for k in range(self.m)] for j in range(self.n)]
            for p in bad_p:
                #vis = [[0 for k in range(self.m)] for j in range(self.n)]
                self.bfs(p, graph, vis, 'block_bad')
            
            vis = [[0 for k in range(self.m)] for j in range(self.n)]
            final_good_cnt = self.bfs((self.n-1, self.m-1), graph, vis, 'escape_good')
            
            if final_good_cnt == good_cnt:
                ans.append('yes')
            else:
                ans.append('no')
        
        W('\n'.join(ans))
        return 0
        
def main():
    s = SOLVE()
    s.solve()
main()