#include <cstdio>
#include <stdlib.h>
#include <time.h>
int chk[1010][1010], map[1010][1010], DISJ[1010];
int find(int v)
{
    if( v == DISJ[v] ) return v;
    return find(DISJ[v]);
}
void Union(int a, int b)
{
    int s = find(a);
    int e = find(b);
    DISJ[s] = e;
}
int main()
{
    int n, m;
    freopen(".20.in","w",stdout);
    srand(time(NULL));
    scanf("%d%d", &n,&m);
    printf("%d\n", n);
    for(int i = 0 ; i< n ; i++ ) DISJ[i] = i;
    for(int i = 0 ; i < n ; i++ )
        for(int j = i+1 ; j < n ; j++ )
            map[i][j] = map[j][i] = rand()%10000+1;
    for(int i = 0 ; i< n ; i++, puts("")) for(int j = 0 ;j < n ; j++ )
        printf("%d ",map[i][j]);
    printf("%d\n",m);
    for(int i = 0 ; i < m ; i++ ) chk[i][i] = 1;
    for(int i = 0 ; i< m ; i++ )
    {
        int a = rand()%n, b = rand()%n;
        if(chk[a][b] || find(a) == find(b) ){ i--; continue; }
        chk[a][b] = 1;
        Union(a,b);
        printf("%d %d\n",a+1,b+1);
    }
}
