use std::io;
// Lukee rivin syötettä ja palauttaa sen sisältämät luvut vektorina.
fn read_numbers() -> Vec<i64> {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Luku epäonnistui");
input
.trim()
.split_whitespace()
.map(|s| s.parse().expect("Ei kelvollinen luku"))
.collect()
}
fn main() {
let testejä = read_numbers()[0];
for _ in 0..testejä {
let koko = read_numbers();
let h = koko[0];
let w = koko[1];
if (w * h <= 3) || (w * h == w + h) {
println!("NO");
continue;
}
let mut ruudukko: Vec<Vec<i64>> = (0..h).map(|_| (0..w).map(|_| 0).collect()).collect();
let mut i = 1;
for y in 0..h {
for x in 0..w {
if y % 2 != x % 2 {
ruudukko[y as usize][x as usize] = i;
i += 1;
}
}
}
for y in 0..h {
for x in 0..w {
if y % 2 == x % 2 {
ruudukko[y as usize][x as usize] = i;
i += 1;
}
}
}
println!("YES");
for rivi in ruudukko {
let riviteksti: Vec<String> = rivi.iter().map(|&n| n.to_string()).collect();
println!("{}", riviteksti.join(" "));
}
}
}