q, k = map(int, input().split()) def dfs(a, op): if len(op) >= q: return op l = len(a[0]) for i in range(l): for j in range(i+1, l): na = [] for t in range(4): nat = a[t] + [1 ^ (a[t][i] & a[t][j])] if sum(nat) > k: break na.append(nat) else: nop = op + [(i+1, j+1)] res = dfs(na, nop) if res: return res return None op = [(1,2), (1,2), (3,4), (4,5), (4,5)] + [(6,7)] * (1 << 18) if k >= 5: print("Yes") for i in range(q): print(*op[i]) else: op = dfs([[0,0],[0,1],[1,0],[1,1]], []) if op == None: print("No") else: print("Yes") for i, j in op: print(i, j)