def nand(a, b): """Return the NAND of two boolean values.""" return not (a and b) q, k = map(int, input().split()) if q <= 9: # naive solution ans = [] vallist = [[] for i in range(4)] vallist[0] = [0,0] vallist[1] = [0,1] vallist[2] = [1,0] vallist[3] = [1,1] def solve(cnt): if cnt == q: maxval = 0 for i in range(4): maxval = max(maxval, sum(vallist[i])) if maxval <= k: print("Yes") for x,y in ans: print(x,y) exit() return for x in range(cnt+2): for y in range(x+1, cnt+2): for i in range(4): vallist[i].append(nand(vallist[i][x], vallist[i][y])) ans.append((x+1, y+1)) solve(cnt + 1) for i in range(4): vallist[i].pop() ans.pop() solve(0) print("No") else: # x = 0/0 if k >= 5: print("Yes") ans = [(1,2), (1,2), (3,4), (4,5), (4,5)] for i in range(6, q + 1): ans.append((6, 7)) for x, y in ans: print(x, y) else: print("No")