#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long llu;
#define INF 0x3f3f3f3f
const int N=600010,mod=1e9+7,P=19260817;
ll n,m,T,k,x,cnt,y,b[N],c[N],vis[N],ans,t,a[N],x2,y2;
string s;
int main()
{
	scanf("%lld%lld",&n,&m);
	if (n==1)
	{
		if (m==0) printf("%lld %lld\n",(ll)1,(ll)2); else printf("%lld\n",(ll)-1);
		return 0;
	}
	if (m>n-2||m<0)
	{
		printf("%lld\n",(ll)-1);
		return 0;
	}
	if (m>=0)
	{
		printf("1 %lld\n",2*n-1);
		for (ll i=1;i<=m;i++) printf("%lld %lld\n",i*2,i*2+1);
		printf("%lld %lld\n",n*2-2,n*2);
		for (ll i=1;i<=n-m-2;i++) printf("%lld %lld\n",n*2+i*2-1,n*2+i*2);
	}
	else
	{
		//printf("%lld %lld\n",(ll)1,(ll)3);
		//for (ll i=1;i<=-m;i++) printf("%lld %lld\n",i*2+2,i*2+3);
		//printf("%lld %lld\n",(ll)2,n*2);
		//for (ll i=1;i<=n+m-2;i++) printf("%lld %lld\n",n*2+i*2-1,n*2+i*2);
	}
}
#include <bits/stdc++.h>
using namespace std;
long long qwq(long long a, long long b) {
	long long ans = 1;
	while (b) {
		if (b & 1) {
			ans = ans * a % 1000000007;
		}
		a *= a;
		a %= 1000000007;
		b >>= 1;
	}
	return ans;
}
int main() {
	int n, m;
	scanf("%d %d", &n, &m);
	printf("%lld\n", qwq(m - 2, n - 1) * (m - 1) % 1000000007);
	return 0;
}