import java.io.*;
import java.util.*;

public class Solution {
	static class Reader {
		BufferedReader br;
		StringTokenizer st;

		public Reader() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		String next() {
			while (st == null || !st.hasMoreElements()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

		int nextInt() {
			return Integer.parseInt(next());
		}

		long nextLong() {
			return Long.parseLong(next());
		}

		double nextDouble() {
			return Double.parseDouble(next());
		}
	}

	public static void main(String[] args) {
		Reader r = new Reader();

		int t = r.nextInt();

		for (int i = 0; i < t; i++) {
			int n = r.nextInt();
			int m = r.nextInt();
			int[][] g = new int[n][m];
			ArrayList<Integer> good = new ArrayList<Integer>();

			for (int j = 0; j < n; j++) {
				String s = r.next();
				for (int k = 0; k < m; k++) {
					char c = s.charAt(k);

					if (c == '.') g[j][k] = 1;
					else if (c == '#') g[j][k] = 2;
					else if (c == 'G') {
						g[j][k] = 3;
						good.add(j); good.add(k);
					} else g[j][k] = 4;
				}
			}

			boolean pos = true;
			for (int j = 0; j < n; j++) {
				for (int k = 0; k < m; k++) {
					if (g[j][k] == 4) {
						if (j > 0 && g[j - 1][k] < 3) g[j - 1][k] = 2; 
						if (k > 0 && g[j][k - 1] < 3) g[j][k - 1] = 2; 
						if (j < n - 1 && g[j + 1][k] < 3) g[j + 1][k] = 2; 
						if (k < m - 1 && g[j][k + 1] < 3) g[j][k + 1] = 2; 
					}
				}
			}

			LinkedList<Integer> list = new LinkedList<Integer>();
			list.add(n - 1);
			list.add(m - 1);
			boolean[][] vis = new boolean[n][m];
			int found = 0;

			while (!list.isEmpty()) {
				int x = list.pop();
				int c = list.pop();

				if (!vis[x][c] && g[x][c] != 2) {
					vis[x][c] = true;
					if (g[x][c] == 3) found++;
					if (x > 0 && !vis[x - 1][c]) {
						list.add(x - 1);
						list.add(c);
					}
					if (c > 0 && !vis[x][c - 1]) {
						list.add(x);
						list.add(c - 1);
					}
					if (x < n - 1 && !vis[x + 1][c]) {
						list.add(x + 1);
						list.add(c);
					}
					if (c < m - 1 && !vis[x][c + 1]) {
						list.add(x);
						list.add(c + 1);
					}
				}
			}

			if (found == (good.size() / 2)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}

		}

	}
}
