#include <bits/stdc++.h>
using namespace std;

#define M 1000000007
#define int long long

int32_t main() {
    int n, m;
    cin >> n >> m;
    if (m < 0) {
        cout << -1 << endl;
        return 0;
    }
    else if (m > 0 && n-m < 2) {
        cout << -1 << endl;
        return 0;
    }
    vector<vector<int>> res;
    int st = 1;
    int mx = n-m-2;
    if (m == 0)
        mx = n-1;
    for (int i = 0; i < mx; i++) {
        res.push_back({st, st+1});
        st += 2;
    }
    int en = st+2;
    for (int i = 0; i <= m; i++) {
        res.push_back({en-1, en});
        en += 2;
    }
    if (m > 0)
        res.push_back({st, en});
    for (auto v: res)
        cout << v[0] << " " << v[1] << endl;
}

#include <bits/stdc++.h>
using namespace std;

#ifndef aa
#define trace(...)
#define endl '\n'
#endif
#define pb push_back
#define ub upper_bound
#define lb lower_bound
#define fi first
#define se second
#define int long long
typedef long long ll;
typedef long double ld;
#define double long double
#define pii pair<int,int>
#define pdd pair<double,double>
#define pll pair<ll,ll>
#define sz(x) ((long long)x.size())
#define fr(a,b,c) for(int a=b; a<=c; a++)
#define frev(a,b,c) for(int a=c; a>=b; a--)
#define rep(a,b,c) for(int a=b; a<c; a++)
#define trav(a,x) for(auto &a:x)
#define all(con) con.begin(),con.end()
#define deb(x) cout << x << endl
#define done(x) {cout << x << endl;return;}
#define mini(x,y) x=min(x,y)
#define maxi(x,y) x=max(x,y)
const ll infl = 0x3f3f3f3f3f3f3f3fLL;
const int infi = 0x3f3f3f3f;
mt19937_64 mt(chrono::steady_clock::now().time_since_epoch().count());
//const int mod = 998244353;
const int mod = 1e9 + 7;
typedef vector<int> vi;
typedef vector<string> vs;
typedef vector<vector<int>> vvi;
typedef vector<pair<int, int>> vpii;
typedef map<int, int> mii;
typedef set<int> si;
typedef set<pair<int,int>> spii;
typedef queue<int> qi;



const int N = 2e5+5;



void solve(){
	
	int n, m;
	cin>>n>>m;
        if(n==1 && m==0)
	   done("1 2");
	if(m<0 || m>=n-1)
		done(-1);
	
	vpii v;
	v.pb({1,2*m+4});
	fr(i,1,m+1)
		v.pb({2*i, 2*i+1});
	int cnt = 2*m+5;
	while(sz(v)<n)
		v.pb({cnt++,cnt++});
		
	trav(p, v)
		cout << p.fi << " " << p.se << endl;
	
	
}



signed main() {
    ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    //srand(chrono::high_resolution_clock::now().time_since_epoch().count());
    cout << fixed << setprecision(15);
    int t = 1;
    //cin >> t;
    while (t--)
        solve();
#ifdef aa
    cout << endl << endl << endl << endl << "Time elapsed: " << (double)(clock() - clk) / CLOCKS_PER_SEC << endl;
#endif
    return 0;
}



 
int powm(int a, int b) {
    int res = 1;
    while (b) {
        if (b & 1)
            res = (res*a) % mod;
        a = (a * a) % mod;
        b >>= 1;
    }
    return res;
}
 
 
int divide(int a, int b) {
    return (a % mod) * powm(b, mod - 2) % mod;
}



int norm(int a) {
    while (a >= mod) a -= mod;
    while (a < 0) a += mod;
    return a;
}


int gcd(int a, int b) {
    return b ? gcd(b, a % b) : a;
}