#![allow(non_snake_case)] #![allow(unused_imports)] use itertools::Itertools; use proconio::input; use proconio::marker::*; use std::cmp::Reverse; use std::collections::*; fn main() { input! { n:usize, k:usize, } solve(n, k); } fn solve(n: usize, k: usize) { if n == 1 && k == 1 { println!("Yes\n1"); return; } if n * (n + 1) / 2 % k != 0 || n == k { println!("No"); return; } let mut l = 1; let mut r = n; let mut ans = vec![vec![]; k]; while l < r { for i in 0..k { ans[i].push(l); l += 1; } for i in 0..k { ans[i].push(r); r -= 1; } } println!("Yes"); for ans in ans { println!("{}", ans.iter().join(" ")); } }