# 2019-11-14 20:54:46(JST)
import sys
# import collections
# import math
# from string import ascii_lowercase, ascii_uppercase, digits
# from bisect import bisect_left as bi_l, bisect_right as bi_r
import itertools
# from functools import reduce
# import operator as op
# from scipy.misc import comb # float
# import numpy as np 

def main():
    n, k = [int(x) for x in sys.stdin.readline().split()]
    # ある１地点を経由してそれ以外の全てにいくのが最も多く
    # これは (n - 1) * (n - 2) // 2　通り
    # kがこれより大きいときには存在せず、それ以下の時は理論上存在する
    if k > (n - 1) * (n - 2) // 2:
        print(-1)
        sys.exit()
    all_combs = list(itertools.combinations(range(1, n+1), 2))
    # 1を中央として考えて、最低限1以外のn-1個の頂点は1とつながっている状態である必要がある
    m = n * (n - 1) // 2 - k
    print(m)
    for i in range(n*(n-1)//2-k): # kの制約から、iの最大値は最小で(n-1)-1まで
        print(all_combs[i][0], all_combs[i][1])


if __name__ == "__main__":
    main() import sys sys import itertools itertools def main():
    n, k = [int(x) for x in sys.stdin.readline().split()]
    # ある１地点を経由してそれ以外の全てにいくのが最も多く
    # これは (n - 1) * (n - 2) // 2　通り
    # kがこれより大きいときには存在せず、それ以下の時は理論上存在する
    if k > (n - 1) * (n - 2) // 2:
        print(-1)
        sys.exit()
    all_combs = list(itertools.combinations(range(1, n+1), 2))
    # 1を中央として考えて、最低限1以外のn-1個の頂点は1とつながっている状態である必要がある
    m = n * (n - 1) // 2 - k
    print(m)
    for i in range(n*(n-1)//2-k): # kの制約から、iの最大値は最小で(n-1)-1まで
        print(all_combs[i][0], all_combs[i][1]) main int(x) for x in sys.stdin.readline().split() for x in sys.stdin.readline().split() x sys.stdin.readline().split() sys.stdin.readline().split sys.stdin.readline() sys.stdin.readline sys.stdin sys stdin readline split for x in sys.stdin.readline().split() int(x) int x n, k = [int(x) for x in sys.stdin.readline().split()] n [int(x) for x in sys.stdin.readline().split()] k if k > (n - 1) * (n - 2) // 2:
        print(-1)
        sys.exit()
     k > (n - 1) * (n - 2) // 2 k (n - 1) * (n - 2) // 2 (n - 1) * (n - 2) n - 1 n 1 n - 2 n 2 2 print(-1) print -1 sys.exit() sys.exit sys exit all_combs = list(itertools.combinations(range(1, n+1), 2)) all_combs list(itertools.combinations(range(1, n+1), 2)) list itertools.combinations(range(1, n+1), 2) itertools.combinations itertools combinations range(1, n+1) range 1 n+1 n 1 2 m = n * (n - 1) // 2 - k m n * (n - 1) // 2 - k n * (n - 1) // 2 n * (n - 1) n n - 1 n 1 2 k print(m) print m for i in range(n*(n-1)//2-k): # kの制約から、iの最大値は最小で(n-1)-1まで
        print(all_combs[i][0], all_combs[i][1]) i range(n*(n-1)//2-k) range n*(n-1)//2-k n*(n-1)//2 n*(n-1) n n-1 n 1 2 k print(all_combs[i][0], all_combs[i][1]) print all_combs[i][0] [i] all_combs i 0 all_combs[i][1] [i] all_combs i 1 if __name__ == "__main__":
    main() __name__ == "__main__" __name__ "__main__" main() main def main():
    n, k = [int(x) for x in sys.stdin.readline().split()]
    # ある１地点を経由してそれ以外の全てにいくのが最も多く
    # これは (n - 1) * (n - 2) // 2　通り
    # kがこれより大きいときには存在せず、それ以下の時は理論上存在する
    if k > (n - 1) * (n - 2) // 2:
        print(-1)
        sys.exit()
    all_combs = list(itertools.combinations(range(1, n+1), 2))
    # 1を中央として考えて、最低限1以外のn-1個の頂点は1とつながっている状態である必要がある
    m = n * (n - 1) // 2 - k
    print(m)
    for i in range(n*(n-1)//2-k): # kの制約から、iの最大値は最小で(n-1)-1まで
        print(all_combs[i][0], all_combs[i][1]) def main():
    n, k = [int(x) for x in sys.stdin.readline().split()]
    # ある１地点を経由してそれ以外の全てにいくのが最も多く
    # これは (n - 1) * (n - 2) // 2　通り
    # kがこれより大きいときには存在せず、それ以下の時は理論上存在する
    if k > (n - 1) * (n - 2) // 2:
        print(-1)
        sys.exit()
    all_combs = list(itertools.combinations(range(1, n+1), 2))
    # 1を中央として考えて、最低限1以外のn-1個の頂点は1とつながっている状態である必要がある
    m = n * (n - 1) // 2 - k
    print(m)
    for i in range(n*(n-1)//2-k): # kの制約から、iの最大値は最小で(n-1)-1まで
        print(all_combs[i][0], all_combs[i][1]) main
# 2019-11-14 20:54:46(JST)
import sys
# import collections
# import math
# from string import ascii_lowercase, ascii_uppercase, digits
# from bisect import bisect_left as bi_l, bisect_right as bi_r
import itertools
# from functools import reduce
# import operator as op
# from scipy.misc import comb # float
# import numpy as np 

def main():
    n, k = [int(x) for x in sys.stdin.readline().split()]
    # ある１地点を経由してそれ以外の全てにいくのが最も多く
    # これは (n - 1) * (n - 2) // 2　通り
    # kがこれより大きいときには存在せず、それ以下の時は理論上存在する
    if k > (n - 1) * (n - 2) // 2:
        print(-1)
        sys.exit()
    all_combs = list(itertools.combinations(range(1, n+1), 2))
    # 1を中央として考えて、最低限1以外のn-1個の頂点は1とつながっている状態である必要がある
    m = n * (n - 1) // 2 - k
    print(m)
    for i in range(n*(n-1)//2-k): # kの制約から、iの最大値は最小で(n-1)-1まで
        print(all_combs[i][0], all_combs[i][1])


if __name__ == "__main__":
    main()
