"""
最短距離が2であるようなノードの組み合わせは、最高で(N-1)C2個存在する。
そこで、この(N-1)C2個の組み合わせがある状態をデフォルトとして、K個になるまで辺を増やしていく。
"""

N,K = map(int,input().split())
if K > (N-1)*(N-2)//2:
    print(-1)
    exit()

edges = []
for i in range(2,N+1):
    edges.append((str(1),str(i)))

rest = (N-1)*(N-2)//2 - K
for i in range(2,N+1):
    for j in range(i+1,N+1):
        if rest == 0:
            break
        else:
            edges.append((str(i),str(j)))
            rest -= 1
    else:
        continue
    break
print(len(edges))
for edge in edges:
    print(" ".join(edge)) """
最短距離が2であるようなノードの組み合わせは、最高で(N-1)C2個存在する。
そこで、この(N-1)C2個の組み合わせがある状態をデフォルトとして、K個になるまで辺を増やしていく。
""" N,K = map(int,input().split()) N map(int,input().split()) map int input().split() ().split () input split K if K > (N-1)*(N-2)//2:
    print(-1)
    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 exit() exit edges = [] edges [] for i in range(2,N+1):
    edges.append((str(1),str(i))) i range(2,N+1) range 2 N+1 N 1 edges.append((str(1),str(i))) edges.append edges append (str(1),str(i)) str(1) str 1 str(i) str i rest = (N-1)*(N-2)//2 - K rest (N-1)*(N-2)//2 - K (N-1)*(N-2)//2 (N-1)*(N-2) N-1 N 1 N-2 N 2 2 K for i in range(2,N+1):
    for j in range(i+1,N+1):
        if rest == 0:
            break
        else:
            edges.append((str(i),str(j)))
            rest -= 1
    else:
        continue
    break i range(2,N+1) range 2 N+1 N 1 for j in range(i+1,N+1):
        if rest == 0:
            break
        else:
            edges.append((str(i),str(j)))
            rest -= 1
    else:
        continue
     j range(i+1,N+1) range i+1 i 1 N+1 N 1 if rest == 0:
            break
        else:
            edges.append((str(i),str(j)))
            rest -= 1
     rest == 0 rest 0 break edges.append((str(i),str(j))) edges.append edges append (str(i),str(j)) str(i) str i str(j) str j rest -= 1 rest 1 continue break print(len(edges)) print len(edges) len edges for edge in edges:
    print(" ".join(edge)) edge edges print(" ".join(edge)) print " ".join(edge) " ".join " " join edge K = map(int,input().split()) map(int,input().split()) K edges = [] [] edges rest -= 1 1 rest rest = (N-1)*(N-2)//2 - K (N-1)*(N-2)//2 - K rest N,K = map(int,input().split()) map(int,input().split()) N
"""
最短距離が2であるようなノードの組み合わせは、最高で(N-1)C2個存在する。
そこで、この(N-1)C2個の組み合わせがある状態をデフォルトとして、K個になるまで辺を増やしていく。
"""

N,K = map(int,input().split())
if K > (N-1)*(N-2)//2:
    print(-1)
    exit()

edges = []
for i in range(2,N+1):
    edges.append((str(1),str(i)))

rest = (N-1)*(N-2)//2 - K
for i in range(2,N+1):
    for j in range(i+1,N+1):
        if rest == 0:
            break
        else:
            edges.append((str(i),str(j)))
            rest -= 1
    else:
        continue
    break
print(len(edges))
for edge in edges:
    print(" ".join(edge))
