import std.stdio, std.conv, std.string, std.array, std.range, std.algorithm, std.container;
import std.math, std.random, std.bigint, std.datetime, std.format;
void main(string[] args){ if(args.length > 1) if(args[1] == "-debug") DEBUG = 1; solve(); }
void log()(){ writeln(""); } void log(T, A ...)(T t, lazy A a){ if(DEBUG) write(t, " "), log(a); } bool DEBUG = 0; 
string read(){ static string[] ss; while(!ss.length) ss = readln.chomp.split; string res = ss[0]; ss.popFront; return res; }
// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- //
void solve(){
	int n = read.to!int;
	int k = read.to!int;
	
	int x = n * (n - 1) / 2 - (n - 1);
	if(k > x){
		"-1".writeln;
		return;
	}
	
	int y = x - k;
	int m = (n - 1) + y;
	
	m.writeln;
	foreach(i; 1 .. n){
		writeln("1 ", i + 1);
	}
	foreach(i; 1 .. n) foreach(j; 1 .. i){
		if(y == 0) return;
		writeln(i + 1, " ", j + 1);
		y -= 1;
	}
	
}

/*
連結なので少なくともn - 1本の辺がある。
その意味で C(n, 2) - (n - 1) が最大
これは、うにグラフのときに実現される

少なくするためには、うにの枝をつなげばよい
つないだ枝は距離1になる
他への影響はない
*/
