def nand(a, b): return (a & b) ^ 1 current = int(1e9) op = [] ans = [] def solve(arr, l): global current, ans if l == 0: r = max(sum(line) for line in arr) if r < current: current = r ans = op[::] # print(r, op) return for i in range(len(arr[0])): for j in range(i + 1, len(arr[0])): new = [] for k in range(4): new.append(arr[k] + [nand(arr[k][i], arr[k][j])]) op.append((i, j)) solve(new, l - 1) op.pop() init = [[0, 0], [0, 1], [1, 0], [1, 1]] test = [[1, 2], [1, 2], [3, 4], [3, 5], [3, 5], [6, 7], [6, 7], [6, 7]] """ def operate(op): hide = init[::] for i, j in op: for k in range(4): hide[k].append(nand(hide[k][i - 1], hide[k][j - 1])) print(hide) return max(sum(line) for line in hide) print(operate(test)) """ q, k = map(int, input().split()) if q <= 6: solve(init, q) if current <= k: print("Yes") for i, j in ans: print(i + 1, j + 1) else: print("No") else: if k >= 5: print("Yes") for t in range(5): i, j = test[t] print(i, j) for _ in range(q - 5): print(6, 7) else: print("No")