using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Runtime.Intrinsics.Arm; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (n, k) = (c[0], c[1]); var take = n / k; if ((k % 2 == 0 && take % 2 == 1) || n == k) { WriteLine("No"); return; } var ans = new int[k][]; for (var i = 0; i < k; ++i) ans[i] = new int[take]; if (take % 2 == 0) { for (var j = 0; j < take; j += 2) { for (var i = 0; i < k; ++i) ans[i][j] = i + j * k + 1; for (var i = 0; i < k; ++i) ans[k - i - 1][j + 1] = i + j * k + k + 1; } } else { for (var j = 0; j + 1 < take; j += 2) { for (var i = 0; i < k; ++i) ans[i][j] = i + j * k + 1; for (var i = 0; i < k; ++i) ans[k - i - 1][j + 1] = i + j * k + k + 1; } var max = k / 2; var second = max + 1; var mid = n - max; for (var i = max; i >= 0; i -= 2) { var lt = (max - i) / 2; var lb = lt + i; if (i == 0) { ans[lt][^1] = mid; } else { (ans[lt][^2], ans[lb][^2]) = (ans[lb][^2], ans[lt][^2]); ans[lt][^1] = mid + i; ans[lb][^1] = mid - i; } var j = i - 1; if (j < 0) continue; lt = second + (max - i) / 2; lb = lt + j; if (j == 0) { ans[lt][^1] = mid; } else { (ans[lt][^2], ans[lb][^2]) = (ans[lb][^2], ans[lt][^2]); ans[lt][^1] = mid + j; ans[lb][^1] = mid - j; } } } WriteLine("Yes"); WriteLine(string.Join("\n", ans.Select(ai => string.Join(" ", ai)))); } }