def nand(a, b): """Return the NAND of two boolean values.""" return not (a and b) q, k = map(int, input().split()) if q <= 8: # 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: if k >= 3: print("Yes") ans = [(1,2), (1,3), (3,4), (1,5)] for i in range(5, q + 1): ans.append((5, 6)) for x, y in ans: print(x, y) else: print("No")