N, K = map(int, input().split())
d = ((N-2)+1)*(N-2)//2
# 一番多いパターンは、1つの頂点に他のすべての頂点が隣接しているパターン

if d < K:
    print(-1)
    exit(0)

ret = N-1 + (d - K)
print(ret)
# 頂点１にすべての頂点をつけていく
for i in range(2, N+1):
    print(1, i)
d -= K
idl = 2
idr = 3
while(d):
    print(idl, idr)
    d -= 1
    idr += 1
    if idr > N:
        idl += 1
        idr = idl+1
 N, K = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split K d = ((N-2)+1)*(N-2)//2 d ((N-2)+1)*(N-2)//2 ((N-2)+1)*(N-2) (N-2)+1 N-2 N 2 1 N-2 N 2 2 if d < K:
    print(-1)
    exit(0) d < K d K print(-1) print -1 exit(0) exit 0 ret = N-1 + (d - K) ret N-1 + (d - K) N-1 N 1 d - K d K print(ret) print ret for i in range(2, N+1):
    print(1, i) i range(2, N+1) range 2 N+1 N 1 print(1, i) print 1 i d -= K d K idl = 2 idl 2 idr = 3 idr 3 while(d):
    print(idl, idr)
    d -= 1
    idr += 1
    if idr > N:
        idl += 1
        idr = idl+1 d print(idl, idr) print idl idr d -= 1 d 1 idr += 1 idr 1 if idr > N:
        idl += 1
        idr = idl+1 idr > N idr N idl += 1 idl 1 idr = idl+1 idr idl+1 idl 1 idl += 1 1 idl K = map(int, input().split()) map(int, input().split()) K d -= 1 1 d idr += 1 1 idr ret = N-1 + (d - K) N-1 + (d - K) ret d -= K K d d = ((N-2)+1)*(N-2)//2 ((N-2)+1)*(N-2)//2 d idr = 3 3 idr idr = idl+1 idl+1 idr idl = 2 2 idl N, K = map(int, input().split()) map(int, input().split()) N
N, K = map(int, input().split())
d = ((N-2)+1)*(N-2)//2
# 一番多いパターンは、1つの頂点に他のすべての頂点が隣接しているパターン

if d < K:
    print(-1)
    exit(0)

ret = N-1 + (d - K)
print(ret)
# 頂点１にすべての頂点をつけていく
for i in range(2, N+1):
    print(1, i)
d -= K
idl = 2
idr = 3
while(d):
    print(idl, idr)
    d -= 1
    idr += 1
    if idr > N:
        idl += 1
        idr = idl+1

