use std::io::*; use std::str::FromStr; fn read() -> T { let stdin = stdin(); let stdin = stdin.lock(); let token: String = stdin .bytes() .map(|c| c.expect("failed to read char") as char) .skip_while(|c| c.is_whitespace()) .take_while(|c| !c.is_whitespace()) .collect(); token.parse().ok().expect("failed to parse token") } fn main() { let n: usize = read(); let k: usize = read(); let m = n / k; // 一人当たりのプレゼントの数 let mut ans = vec![vec![0; m]; k]; if ((k+1) * m) % k != 0 { println!("No"); return; } if m % 2 == 0 { for i in 0..m { for j in 0..k { if i % 2 == 0 { ans[j][i] = (i+1) * k - j } else { ans[j][i] = i * k + j + 1 } } } } else { let mut d = 0; for dd in 1..k { if (dd * m) % k == 0 { d = dd; break; } } if d == 0 { println!("No"); return; } for i in 0..m { let diff = (i * d) % k; for j in 0..k { ans[(j+diff)%k][i] = i * k + j + 1; } } } println!("Yes"); for i in 0..k { print!("{}", ans[i][0]); for j in 1..m { print!(" {}", ans[i][j]); } print!("\n"); } }