#include <bits/stdc++.h>
using namespace std;
using ll = long long;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int d;
    long long k;
    if (!(cin >> d >> k)) return 0;
 
    vector<pair<int,int>> edges;
    int nxt = 1; // số thứ tự đỉnh tiếp theo (bắt đầu từ 1)
 
    auto add_edge = [&](int u, int v){
        if (u > v) swap(u,v);
        edges.emplace_back(u,v);
    };
 
    if (d == 2) {
        // Dùng star gadget: center nối t lá => tạo t*(t-1)/2 cặp có khoảng cách 2
        long long rem = k;
        while (rem > 0) {
            // tìm t tối đa sao cho t*(t-1)/2 <= rem
            int t = 1;
            int lo = 1, hi = 1000;
            while (lo <= hi) {
                int mid = (lo + hi) / 2;
                long long val = 1LL * mid * (mid - 1) / 2;
                if (val <= rem) { t = mid; lo = mid + 1; }
                else hi = mid - 1;
            }
            // tạo center
            int center = nxt++;
            // tạo t lá và nối
            for (int i = 0; i < t; ++i) {
                int leaf = nxt++;
                add_edge(center, leaf);
            }
            rem -= 1LL * t * (t - 1) / 2;
        }
    } else {
        // d >= 3
        long long rem = k;
        while (rem > 0) {
            // lấy t lớn nhất sao cho t*t <= rem
            int t = (int)floor(sqrt((double)rem));
            if (t == 0) t = 1; // vẫn cần xử lý phần dư nhỏ
            // tạo gadget: một đường (path) có độ dài (d-2) (tức d-1 đỉnh),
            // rồi thêm t lá ở 2 đầu => tạo t * t cặp có khoảng cách d
            // path nodes:
            vector<int> path;
            for (int i = 0; i < d - 1; ++i) {
                path.push_back(nxt++);
            }
            // nối path
            for (int i = 0; i + 1 < (int)path.size(); ++i) {
                add_edge(path[i], path[i+1]);
            }
            int left = path.front();
            int right = path.back();
            // thêm t lá bên trái
            for (int i = 0; i < t; ++i) {
                int u = nxt++;
                add_edge(left, u);
            }
            // thêm t lá bên phải
            for (int i = 0; i < t; ++i) {
                int u = nxt++;
                add_edge(right, u);
            }
            rem -= 1LL * t * t;
        }
    }
 
    int n = nxt - 1;
    int m = (int)edges.size();
 
    // In kết quả
    cout << n << " " << m << "\n";
    for (auto &e : edges) {
        cout << e.first << " " << e.second << "\n";
    }
 
    return 0;
}
 
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgaW50IGQ7CiAgICBsb25nIGxvbmcgazsKICAgIGlmICghKGNpbiA+PiBkID4+IGspKSByZXR1cm4gMDsKCiAgICB2ZWN0b3I8cGFpcjxpbnQsaW50Pj4gZWRnZXM7CiAgICBpbnQgbnh0ID0gMTsgLy8gc+G7kSB0aOG7qSB04buxIMSR4buJbmggdGnhur9wIHRoZW8gKGLhuq90IMSR4bqndSB04burIDEpCgogICAgYXV0byBhZGRfZWRnZSA9IFsmXShpbnQgdSwgaW50IHYpewogICAgICAgIGlmICh1ID4gdikgc3dhcCh1LHYpOwogICAgICAgIGVkZ2VzLmVtcGxhY2VfYmFjayh1LHYpOwogICAgfTsKCiAgICBpZiAoZCA9PSAyKSB7CiAgICAgICAgLy8gRMO5bmcgc3RhciBnYWRnZXQ6IGNlbnRlciBu4buRaSB0IGzDoSA9PiB04bqhbyB0Kih0LTEpLzIgY+G6t3AgY8OzIGtob+G6o25nIGPDoWNoIDIKICAgICAgICBsb25nIGxvbmcgcmVtID0gazsKICAgICAgICB3aGlsZSAocmVtID4gMCkgewogICAgICAgICAgICAvLyB0w6xtIHQgdOG7kWkgxJFhIHNhbyBjaG8gdCoodC0xKS8yIDw9IHJlbQogICAgICAgICAgICBpbnQgdCA9IDE7CiAgICAgICAgICAgIGludCBsbyA9IDEsIGhpID0gMTAwMDsKICAgICAgICAgICAgd2hpbGUgKGxvIDw9IGhpKSB7CiAgICAgICAgICAgICAgICBpbnQgbWlkID0gKGxvICsgaGkpIC8gMjsKICAgICAgICAgICAgICAgIGxvbmcgbG9uZyB2YWwgPSAxTEwgKiBtaWQgKiAobWlkIC0gMSkgLyAyOwogICAgICAgICAgICAgICAgaWYgKHZhbCA8PSByZW0pIHsgdCA9IG1pZDsgbG8gPSBtaWQgKyAxOyB9CiAgICAgICAgICAgICAgICBlbHNlIGhpID0gbWlkIC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyB04bqhbyBjZW50ZXIKICAgICAgICAgICAgaW50IGNlbnRlciA9IG54dCsrOwogICAgICAgICAgICAvLyB04bqhbyB0IGzDoSB2w6AgbuG7kWkKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0OyArK2kpIHsKICAgICAgICAgICAgICAgIGludCBsZWFmID0gbnh0Kys7CiAgICAgICAgICAgICAgICBhZGRfZWRnZShjZW50ZXIsIGxlYWYpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlbSAtPSAxTEwgKiB0ICogKHQgLSAxKSAvIDI7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAvLyBkID49IDMKICAgICAgICBsb25nIGxvbmcgcmVtID0gazsKICAgICAgICB3aGlsZSAocmVtID4gMCkgewogICAgICAgICAgICAvLyBs4bqleSB0IGzhu5tuIG5o4bqldCBzYW8gY2hvIHQqdCA8PSByZW0KICAgICAgICAgICAgaW50IHQgPSAoaW50KWZsb29yKHNxcnQoKGRvdWJsZSlyZW0pKTsKICAgICAgICAgICAgaWYgKHQgPT0gMCkgdCA9IDE7IC8vIHbhuqtuIGPhuqduIHjhu60gbMO9IHBo4bqnbiBkxrAgbmjhu48KICAgICAgICAgICAgLy8gdOG6oW8gZ2FkZ2V0OiBt4buZdCDEkcaw4budbmcgKHBhdGgpIGPDsyDEkeG7mSBkw6BpIChkLTIpICh04bupYyBkLTEgxJHhu4luaCksCiAgICAgICAgICAgIC8vIHLhu5NpIHRow6ptIHQgbMOhIOG7nyAyIMSR4bqndSA9PiB04bqhbyB0ICogdCBj4bq3cCBjw7Mga2hv4bqjbmcgY8OhY2ggZAogICAgICAgICAgICAvLyBwYXRoIG5vZGVzOgogICAgICAgICAgICB2ZWN0b3I8aW50PiBwYXRoOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGQgLSAxOyArK2kpIHsKICAgICAgICAgICAgICAgIHBhdGgucHVzaF9iYWNrKG54dCsrKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBu4buRaSBwYXRoCiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpICsgMSA8IChpbnQpcGF0aC5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgYWRkX2VkZ2UocGF0aFtpXSwgcGF0aFtpKzFdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnQgbGVmdCA9IHBhdGguZnJvbnQoKTsKICAgICAgICAgICAgaW50IHJpZ2h0ID0gcGF0aC5iYWNrKCk7CiAgICAgICAgICAgIC8vIHRow6ptIHQgbMOhIGLDqm4gdHLDoWkKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0OyArK2kpIHsKICAgICAgICAgICAgICAgIGludCB1ID0gbnh0Kys7CiAgICAgICAgICAgICAgICBhZGRfZWRnZShsZWZ0LCB1KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyB0aMOqbSB0IGzDoSBiw6puIHBo4bqjaQogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHQ7ICsraSkgewogICAgICAgICAgICAgICAgaW50IHUgPSBueHQrKzsKICAgICAgICAgICAgICAgIGFkZF9lZGdlKHJpZ2h0LCB1KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZW0gLT0gMUxMICogdCAqIHQ7CiAgICAgICAgfQogICAgfQoKICAgIGludCBuID0gbnh0IC0gMTsKICAgIGludCBtID0gKGludCllZGdlcy5zaXplKCk7CgogICAgLy8gSW4ga+G6v3QgcXXhuqMKICAgIGNvdXQgPDwgbiA8PCAiICIgPDwgbSA8PCAiXG4iOwogICAgZm9yIChhdXRvICZlIDogZWRnZXMpIHsKICAgICAgICBjb3V0IDw8IGUuZmlyc3QgPDwgIiAiIDw8IGUuc2Vjb25kIDw8ICJcbiI7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K