unittest
{
//	assert( [ "5 3" ].solve == "5\n4 3\n1 2\n3 1\n4 5\n2 3" );
	assert( [ "5 3" ].solve == "7\n1 2\n1 3\n1 4\n1 5\n2 3\n2 4\n2 5" );
	assert( [ "5 8" ].solve == "-1" );
}



import std.conv;
import std.format;
import std.range;
import std.stdio;

void main()
{
	stdin.byLineCopy.solve.writeln;
}

auto solve( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto n = 0L;
	auto k = 0L;
	input.front.formattedRead!"%s %s"( n, k );
	
	// スター型グラフを作ると頂点ペア数が最大になる
	// そこから外側の頂点間に辺を張るごとに1ペアずつ減らせる
	auto t = ( n - 1 ) * ( n - 2 ) / 2;
	if( t < k ) return "-1";
	
	string[] anss;
	foreach( i; 2 .. n + 1 )
	{
		anss ~= format( "1 %s", i );
	}
	LOOP: foreach( i; 2 .. n + 1 )
	{
		foreach( j; i + 1 .. n + 1 )
		{
			if( t == k ) break LOOP;
			anss ~= format( "%s %s", i, j );
			t--;
		}
	}
	return format( "%s\n%s", anss.length, anss.join( "\n" ) );
}
