#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
int numpair , diss;
int numnode;
vector<pair<int,int>>edges;
void init(){
cin >> diss >> numpair;
}
void print(){
cout << numnode << " " << edges.size() << '\n';
for(auto &e : edges) cout << e.fi << " " << e.se << '\n';
}
namespace general{
bool check(){
return diss > 2;
}
void creatcomponent(int x , int y){
int left=++numnode;
int cur = left;
for(int i=0;i<diss-2;i++){
int tmp=++numnode;
edges.emplace_back(cur,tmp);
cur=tmp;
}
int right = cur;
for(int i=1;i<x;i++) edges.emplace_back(left,++numnode);
for(int i=1;i<y;i++) edges.emplace_back(right,++numnode);
}
void solve(){
while(numpair>0){
int t=1;
while((t+1)*(t+1)<=numpair) t++;
creatcomponent(t,t);
numpair-=t*t;
}
}
}
namespace special{
bool check(){
return diss==2;
}
void creatcomponent(int t){
int center=++numnode;
for(int i=0;i<t;i++){
int leaf=++numnode;
edges.emplace_back(center,leaf);
}
}
void solve(){
while(numpair>0){
int t=2;
while((t+1)*t/2<=numpair) t++;
creatcomponent(t);
numpair-=t*(t-1)/2;
}
}
}
void process(){
if(general::check()) general::solve();
if(special::check()) special::solve();
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
freopen("graph.inp","r",stdin);
freopen("graph.out","w",stdout);
init();
process();
print();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAoKaW50IG51bXBhaXIgLCBkaXNzOwppbnQgbnVtbm9kZTsKdmVjdG9yPHBhaXI8aW50LGludD4+ZWRnZXM7Cgp2b2lkIGluaXQoKXsKICAgIGNpbiA+PiBkaXNzID4+IG51bXBhaXI7Cn0KCnZvaWQgcHJpbnQoKXsKICAgIGNvdXQgPDwgbnVtbm9kZSA8PCAiICIgPDwgZWRnZXMuc2l6ZSgpIDw8ICdcbic7CiAgICBmb3IoYXV0byAmZSA6IGVkZ2VzKSBjb3V0IDw8IGUuZmkgPDwgICIgIiA8PCBlLnNlIDw8ICdcbic7Cn0KCm5hbWVzcGFjZSBnZW5lcmFsewogICAgYm9vbCBjaGVjaygpewogICAgICAgIHJldHVybiBkaXNzID4gMjsKICAgIH0KICAgIHZvaWQgY3JlYXRjb21wb25lbnQoaW50IHggLCBpbnQgeSl7CiAgICAgICAgaW50IGxlZnQ9KytudW1ub2RlOwogICAgICAgIGludCBjdXIgPSBsZWZ0OwogICAgICAgIGZvcihpbnQgaT0wO2k8ZGlzcy0yO2krKyl7CiAgICAgICAgICAgIGludCB0bXA9KytudW1ub2RlOwogICAgICAgICAgICBlZGdlcy5lbXBsYWNlX2JhY2soY3VyLHRtcCk7CiAgICAgICAgICAgIGN1cj10bXA7CiAgICAgICAgfQogICAgICAgIGludCByaWdodCA9IGN1cjsKICAgICAgICBmb3IoaW50IGk9MTtpPHg7aSsrKSBlZGdlcy5lbXBsYWNlX2JhY2sobGVmdCwrK251bW5vZGUpOwogICAgICAgIGZvcihpbnQgaT0xO2k8eTtpKyspIGVkZ2VzLmVtcGxhY2VfYmFjayhyaWdodCwrK251bW5vZGUpOwogICAgfQogICAgdm9pZCBzb2x2ZSgpewogICAgICAgIHdoaWxlKG51bXBhaXI+MCl7CiAgICAgICAgICAgIGludCB0PTE7CiAgICAgICAgICAgIHdoaWxlKCh0KzEpKih0KzEpPD1udW1wYWlyKSB0Kys7CiAgICAgICAgICAgIGNyZWF0Y29tcG9uZW50KHQsdCk7CiAgICAgICAgICAgIG51bXBhaXItPXQqdDsKICAgICAgICB9CiAgICB9Cn0KbmFtZXNwYWNlIHNwZWNpYWx7CiAgICBib29sIGNoZWNrKCl7CiAgICAgICAgcmV0dXJuIGRpc3M9PTI7CiAgICB9CiAgICB2b2lkIGNyZWF0Y29tcG9uZW50KGludCB0KXsKICAgICAgICBpbnQgY2VudGVyPSsrbnVtbm9kZTsKICAgICAgICBmb3IoaW50IGk9MDtpPHQ7aSsrKXsKICAgICAgICAgICAgaW50IGxlYWY9KytudW1ub2RlOwogICAgICAgICAgICBlZGdlcy5lbXBsYWNlX2JhY2soY2VudGVyLGxlYWYpOwogICAgICAgIH0KICAgIH0KICAgIHZvaWQgc29sdmUoKXsKICAgICAgICB3aGlsZShudW1wYWlyPjApewogICAgICAgICAgICBpbnQgdD0yOwogICAgICAgICAgICB3aGlsZSgodCsxKSp0LzI8PW51bXBhaXIpIHQrKzsKICAgICAgICAgICAgY3JlYXRjb21wb25lbnQodCk7CiAgICAgICAgICAgIG51bXBhaXItPXQqKHQtMSkvMjsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgcHJvY2VzcygpewogICAgaWYoZ2VuZXJhbDo6Y2hlY2soKSkgZ2VuZXJhbDo6c29sdmUoKTsKICAgIGlmKHNwZWNpYWw6OmNoZWNrKCkpIHNwZWNpYWw6OnNvbHZlKCk7Cn0KCmludCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgZnJlb3BlbigiZ3JhcGguaW5wIiwiciIsc3RkaW4pOwogICAgZnJlb3BlbigiZ3JhcGgub3V0IiwidyIsc3Rkb3V0KTsKICAgIGluaXQoKTsKICAgIHByb2Nlc3MoKTsKICAgIHByaW50KCk7CiAgICByZXR1cm4gMDsKfQo=