using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (n, m) = (c[0], c[1]); var fh = n / 2; var sh = n - n / 2; if (m < n - 1 || m > sh * fh) { WriteLine("NO"); return; } var tree = new HashSet[fh]; for (var i = 0; i < fh; ++i) tree[i] = new HashSet(); var edges = new List(); for (var i = 0; i < fh; ++i) { tree[i].Add(i + fh); edges.Add([i + 1, i + fh + 1]); if (i + fh + 1 < n) { tree[i].Add(i + fh + 1); edges.Add([i + 1, i + fh + 2]); } } for (var i = 0; i < fh; ++i) { if (edges.Count >= m) break; for (var j = fh; j < n; ++j) { if (edges.Count >= m) break; if (!tree[i].Contains(j)) { edges.Add([i + 1, j + 1]); } } } WriteLine("YES"); var a = new int[n]; for (var i = 0; i < n; ++i) a[i] = i + 1; WriteLine(string.Join(" ", a)); WriteLine(string.Join("\n", edges.Select(ei => string.Join(" ", ei)))); } }