# https://atcoder.jp/contests/abc131/tasks/abc131_e

# 最短距離が2の頂点対がちょうどK個ある
# 最短距離が2の頂点対とは→うまく定式化できないな... ちょうど一つのノードを挟んで存在する

# 基本戦略、非連結からつなげてく。全結合から切っていく。一番kが多い状態から減らす
# 一番kが多い状態→ノード0を中心として、周りに1,2,3..を連結させたスターグラフ
# まわりのノードを連結していくたびにkが一つずつ少なくなるのでK=kになるまでそれを繰り返せば良さそう

from itertools import combinations
N, K = map(int, input().split())
k_max = ((N - 1) * (N - 2)) // 2
# print(k_max)
if k_max < K:
    print(-1)
    exit()

k = k_max
ans = []
for i in range(1, N):  # ここは0based
    ans.append((1, i + 1))  # ここは1basedに直す
# スターグラフ(k_maxの状態完成)
# 一つずつ引いていく
for u, v in combinations(range(1, N), r=2):
    if k == K:
        break
    k -= 1
    ans.append((u + 1, v + 1))

print(len(ans))
for u, v in ans:
    print(u, v) from itertools import combinations N, K = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split K k_max = ((N - 1) * (N - 2)) // 2 k_max ((N - 1) * (N - 2)) // 2 (N - 1) * (N - 2) N - 1 N 1 N - 2 N 2 2 if k_max < K:
    print(-1)
    exit() k_max < K k_max K print(-1) print -1 exit() exit k = k_max k k_max ans = [] ans [] for i in range(1, N):  # ここは0based
    ans.append((1, i + 1))  # ここは1basedに直す
# スターグラフ(k_maxの状態完成)
# 一つずつ引いていく i range(1, N) range 1 N ans.append((1, i + 1)) ans.append ans append (1, i + 1) 1 i + 1 i 1 for u, v in combinations(range(1, N), r=2):
    if k == K:
        break
    k -= 1
    ans.append((u + 1, v + 1)) u v combinations(range(1, N), r=2) combinations range(1, N) range 1 N r=2 r 2 if k == K:
        break
     k == K k K break k -= 1 k 1 ans.append((u + 1, v + 1)) ans.append ans append (u + 1, v + 1) u + 1 u 1 v + 1 v 1 print(len(ans)) print len(ans) len ans for u, v in ans:
    print(u, v) u v ans print(u, v) print u v k_max = ((N - 1) * (N - 2)) // 2 ((N - 1) * (N - 2)) // 2 k_max ans = [] [] ans k = k_max k_max k K = map(int, input().split()) map(int, input().split()) K N, K = map(int, input().split()) map(int, input().split()) N k -= 1 1 k
# https://atcoder.jp/contests/abc131/tasks/abc131_e

# 最短距離が2の頂点対がちょうどK個ある
# 最短距離が2の頂点対とは→うまく定式化できないな... ちょうど一つのノードを挟んで存在する

# 基本戦略、非連結からつなげてく。全結合から切っていく。一番kが多い状態から減らす
# 一番kが多い状態→ノード0を中心として、周りに1,2,3..を連結させたスターグラフ
# まわりのノードを連結していくたびにkが一つずつ少なくなるのでK=kになるまでそれを繰り返せば良さそう

from itertools import combinations
N, K = map(int, input().split())
k_max = ((N - 1) * (N - 2)) // 2
# print(k_max)
if k_max < K:
    print(-1)
    exit()

k = k_max
ans = []
for i in range(1, N):  # ここは0based
    ans.append((1, i + 1))  # ここは1basedに直す
# スターグラフ(k_maxの状態完成)
# 一つずつ引いていく
for u, v in combinations(range(1, N), r=2):
    if k == K:
        break
    k -= 1
    ans.append((u + 1, v + 1))

print(len(ans))
for u, v in ans:
    print(u, v)
