#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ll long long
#define ld long double
#define ull unsigned long long
#define ff first
#define ss second
#define pii pair<int,int>
#define pll pair<long long, long long>
#define vi vector<int>
#define vl vector<long long>
#define pb push_back
#define rep(i, b) for(int i = 0; i < (b); ++i)
#define rep2(i,a,b) for(int i = a; i <= (b); ++i)
#define rep3(i,a,b,c) for(int i = a; i <= (b); i+=c)
#define count_bits(x) __builtin_popcountll((x))
#define all(x) (x).begin(),(x).end()
#define siz(x) (int)(x).size()
#define forall(it,x) for(auto& it:(x))
using namespace __gnu_pbds;
using namespace std;
typedef tree<int, null_type, less<int>, rb_tree_tag,tree_order_statistics_node_update> ordered_set;
//mt19937 mt;void random_start(){mt.seed(chrono::time_point_cast<chrono::milliseconds>(chrono::high_resolution_clock::now()).time_since_epoch().count());}
//ll los(ll a, ll b) {return a + (mt() % (b-a+1));}
const int INF = 1e9+50;
const ll INF_L = 1e18+40;
const ll MOD = 1e9+7;
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//random_start();
int n,t;
cin >> n >> t;
vi arr(n+1);
vi arr2(n+1);
rep(i,n) cin >> arr[i+1];
rep2(i,1,n) arr2[i] = arr[i];
vector<pii> ans;
if(t == 1)
{
vector<pii> sort_arr;
rep(i,n) sort_arr.pb({-arr[i+1],i+1});
sort(all(sort_arr));
rep(i,n)
{
rep2(j,1,n-1-i)
{
ans.pb({j,j+1});
arr[j] ^= arr[j+1];
}
pii m = {-1,-1};
rep2(j,1,n-i)
{
m = max(m,{arr2[j],j});
}
int x = m.ss;
// cout << x << " x\n";
// rep2(k,1,n) cout << arr[k] << " ";
// cout << " arr\n";
rep2(j,x,n-1-i)
{
ans.pb({j+1,j});
arr[j+1] ^= arr[j];
}
for(int j = x-2; j >= 1; j--)
{
ans.pb({j,j+1});
arr[j] ^= arr[j+1];
}
rep2(i,x,n-1)
{
arr2[i] = arr2[i+1];
}
// rep2(k,1,n) cout << arr[k] << " ";
// cout << " arr\n";
// cout << "\n";
}
for(int i = n-1; i >= 1; i--)
{
ans.pb({i,i+1});
arr[i] ^= arr[i+1];
}
// rep2(k,1,n) cout << arr[k] << " ";
// cout << " arr\n";
}
if(t == 2)
{
int cur_suf = n;
for(int bit = 19; bit >= 0; bit--)
{
bool was = false;
rep2(i,1,cur_suf)
{
if(arr[i] & (1 << bit))
{
was = true;
int cur = i-1;
while(cur >= 1 && (arr[cur] & (1 << bit)) == 0)
{
ans.pb({cur,cur+1});
arr[cur] ^= arr[cur+1];
cur--;
}
cur = i+1;
while(cur <= cur_suf && (arr[cur] & (1 << bit)) == 0)
{
ans.pb({cur,cur-1});
arr[cur] ^= arr[cur-1];
cur++;
}
}
}
if(was == true)
{
rep2(i,2,cur_suf)
{
ans.pb({i-1,i});
arr[i-1] ^= arr[i];
}
cur_suf--;
}
// rep2(i,1,n) cout << arr[i] << " ";
// cout << " arr\n";
}
}
cout << siz(ans) << "\n";
forall(it,ans) cout << it.ff << " " << it.ss << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBzcyBzZWNvbmQKI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIHBsbCBwYWlyPGxvbmcgbG9uZywgbG9uZyBsb25nPgojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgdmwgdmVjdG9yPGxvbmcgbG9uZz4KI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSByZXAoaSwgYikgZm9yKGludCBpID0gMDsgaSA8IChiKTsgKytpKQojZGVmaW5lIHJlcDIoaSxhLGIpIGZvcihpbnQgaSA9IGE7IGkgPD0gKGIpOyArK2kpCiNkZWZpbmUgcmVwMyhpLGEsYixjKSBmb3IoaW50IGkgPSBhOyBpIDw9IChiKTsgaSs9YykKI2RlZmluZSBjb3VudF9iaXRzKHgpIF9fYnVpbHRpbl9wb3Bjb3VudGxsKCh4KSkKI2RlZmluZSBhbGwoeCkgKHgpLmJlZ2luKCksKHgpLmVuZCgpCiNkZWZpbmUgc2l6KHgpIChpbnQpKHgpLnNpemUoKQojZGVmaW5lIGZvcmFsbChpdCx4KSBmb3IoYXV0byYgaXQ6KHgpKQp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiB0cmVlPGludCwgbnVsbF90eXBlLCBsZXNzPGludD4sIHJiX3RyZWVfdGFnLHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4gb3JkZXJlZF9zZXQ7Ci8vbXQxOTkzNyBtdDt2b2lkIHJhbmRvbV9zdGFydCgpe210LnNlZWQoY2hyb25vOjp0aW1lX3BvaW50X2Nhc3Q8Y2hyb25vOjptaWxsaXNlY29uZHM+KGNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKSkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpO30KLy9sbCBsb3MobGwgYSwgbGwgYikge3JldHVybiBhICsgKG10KCkgJSAoYi1hKzEpKTt9CmNvbnN0IGludCBJTkYgPSAxZTkrNTA7CmNvbnN0IGxsIElORl9MID0gMWUxOCs0MDsKY29uc3QgbGwgTU9EID0gMWU5Kzc7CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKICAgIC8vcmFuZG9tX3N0YXJ0KCk7CiAgICBpbnQgbix0OwogICAgY2luID4+IG4gPj4gdDsKICAgIHZpIGFycihuKzEpOwogICAgdmkgYXJyMihuKzEpOwogICAgcmVwKGksbikgY2luID4+IGFycltpKzFdOwogICAgcmVwMihpLDEsbikgYXJyMltpXSA9IGFycltpXTsKICAgIHZlY3RvcjxwaWk+IGFuczsKICAgIGlmKHQgPT0gMSkKICAgIHsKICAgICAgICB2ZWN0b3I8cGlpPiBzb3J0X2FycjsKICAgICAgICByZXAoaSxuKSBzb3J0X2Fyci5wYih7LWFycltpKzFdLGkrMX0pOwogICAgICAgIHNvcnQoYWxsKHNvcnRfYXJyKSk7CiAgICAgICAgcmVwKGksbikKICAgICAgICB7CiAgICAgICAgICAgIHJlcDIoaiwxLG4tMS1pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhbnMucGIoe2osaisxfSk7CiAgICAgICAgICAgICAgICBhcnJbal0gXj0gYXJyW2orMV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcGlpIG0gPSB7LTEsLTF9OwogICAgICAgICAgICByZXAyKGosMSxuLWkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG0gPSBtYXgobSx7YXJyMltqXSxqfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW50IHggPSBtLnNzOwogICAgICAgICAgLy8gIGNvdXQgPDwgeCA8PCAiIHhcbiI7CiAgICAgICAgICAvLyAgcmVwMihrLDEsbikgY291dCA8PCBhcnJba10gPDwgIiAiOwogICAgICAgICAgIC8vIGNvdXQgPDwgIiBhcnJcbiI7CiAgICAgICAgICAgIHJlcDIoaix4LG4tMS1pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhbnMucGIoe2orMSxqfSk7CiAgICAgICAgICAgICAgICBhcnJbaisxXSBePSBhcnJbal07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yKGludCBqID0geC0yOyBqID49IDE7IGotLSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYW5zLnBiKHtqLGorMX0pOwogICAgICAgICAgICAgICAgYXJyW2pdIF49IGFycltqKzFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlcDIoaSx4LG4tMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYXJyMltpXSA9IGFycjJbaSsxXTsKICAgICAgICAgICAgfQogICAgICAgICAgLy8gIHJlcDIoaywxLG4pIGNvdXQgPDwgYXJyW2tdIDw8ICIgIjsKICAgICAgICAgIC8vICBjb3V0IDw8ICIgYXJyXG4iOwogICAgICAgICAvLyAgIGNvdXQgPDwgIlxuIjsKICAgICAgICB9CiAgICAgICAgZm9yKGludCBpID0gbi0xOyBpID49IDE7IGktLSkKICAgICAgICB7CiAgICAgICAgICAgIGFucy5wYih7aSxpKzF9KTsKICAgICAgICAgICAgYXJyW2ldIF49IGFycltpKzFdOwogICAgICAgIH0KICAgICAgIC8vIHJlcDIoaywxLG4pIGNvdXQgPDwgYXJyW2tdIDw8ICIgIjsKICAgICAgIC8vIGNvdXQgPDwgIiBhcnJcbiI7CiAgICB9CiAgICBpZih0ID09IDIpCiAgICB7CiAgICAgICAgaW50IGN1cl9zdWYgPSBuOwogICAgICAgIGZvcihpbnQgYml0ID0gMTk7IGJpdCA+PSAwOyBiaXQtLSkKICAgICAgICB7CiAgICAgICAgICAgIGJvb2wgd2FzID0gZmFsc2U7CiAgICAgICAgICAgIHJlcDIoaSwxLGN1cl9zdWYpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKGFycltpXSAmICgxIDw8IGJpdCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgd2FzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBpbnQgY3VyID0gaS0xOwogICAgICAgICAgICAgICAgICAgIHdoaWxlKGN1ciA+PSAxICYmIChhcnJbY3VyXSAmICgxIDw8IGJpdCkpID09IDApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhbnMucGIoe2N1cixjdXIrMX0pOwogICAgICAgICAgICAgICAgICAgICAgICBhcnJbY3VyXSBePSBhcnJbY3VyKzFdOwogICAgICAgICAgICAgICAgICAgICAgICBjdXItLTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY3VyID0gaSsxOwogICAgICAgICAgICAgICAgICAgIHdoaWxlKGN1ciA8PSBjdXJfc3VmICYmIChhcnJbY3VyXSAmICgxIDw8IGJpdCkpID09IDApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhbnMucGIoe2N1cixjdXItMX0pOwogICAgICAgICAgICAgICAgICAgICAgICBhcnJbY3VyXSBePSBhcnJbY3VyLTFdOwogICAgICAgICAgICAgICAgICAgICAgICBjdXIrKzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYod2FzID09IHRydWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJlcDIoaSwyLGN1cl9zdWYpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYW5zLnBiKHtpLTEsaX0pOwogICAgICAgICAgICAgICAgICAgIGFycltpLTFdIF49IGFycltpXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGN1cl9zdWYtLTsKICAgICAgICAgICAgfQogICAgICAgICAgLy8gIHJlcDIoaSwxLG4pIGNvdXQgPDwgYXJyW2ldIDw8ICIgIjsKICAgICAgICAgICAvLyBjb3V0IDw8ICIgYXJyXG4iOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgc2l6KGFucykgPDwgIlxuIjsKICAgIGZvcmFsbChpdCxhbnMpIGNvdXQgPDwgaXQuZmYgPDwgIiAiIDw8IGl0LnNzIDw8ICJcbiI7Cn0=