#include <bits/stdc++.h>
using namespace std;
#define ll long long
using l = int64_t;
#define int long long
void Fast() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
// #ifndef ONLINE_JUDGE
// freopen("input.txt", "r", stdin);
// #endif
}
const int N= 2e5 + 5;
const int mod = 998244353;
const ll INF = 1e15;
struct Trie {
int mxbit = 30;
struct Node {
int adj[2]{};
int &operator[](int x) {
return adj[x];
}
int sz=0;
int idx=-2;
};
vector<Node> trie;
int newNode() {
trie.emplace_back();
return trie.size() - 1;
}
void init() {
trie.clear();
newNode();
}
int sz(int u) {
return trie[u].sz;
}
Trie() { init();}
void update(int n,int op,int idx) {
int u = 0;
for (int i = mxbit-1 ; i >= 0 ; i--) {
int bit = (n>>i)&1;
if (!trie[u][bit]){trie[u][bit]=newNode();}
u = trie[u][bit];
if (trie[u].idx==-2)trie[u].idx=idx;
trie[u].sz+=op;
}
if (trie[u].idx==-2)trie[u].idx=idx;
}
int query(int x,int k) {
int res=INF;
int u = 0;
for (int i = mxbit - 1; ~i; --i) {
int chx = x>>i&1;
int chk = k>>i&1;
int o = trie[u][!chx];
int z = trie[u][chx];
if (!chk) {
if (o) res = min(res, trie[o].idx);
u=z;
}
else u = o;
if (!u) break;
}
if (trie[u].idx>-2)res=min(res,trie[u].idx);
if (res==INF) return -2;
return res;
}
};
void solve() {
Trie trie;
int n,k;cin>>n>>k;
vector<ll>v(n);
for (int i = 0 ; i < n ; i++)cin>>v[i];
ll pr=0;
ll mx=0;
ll idx;
trie.update(0, 1,-1);
for (int i = 0 ; i < n ; i++) {
pr ^= v[i];
int tmp = trie.query(pr , k);
if (tmp!=-2) {
if (i-tmp>mx) {
mx=i-tmp;
idx=tmp+1;
}
}
trie.update(pr, 1,i);
}
cout<<idx+1<<" " <<mx<<"\n";
}
int32_t main() {
Fast();
int tc = 1;
//cin >> tc;
for (int test = 1; test <= tc; ++test) {
//cout << "Case " << test << ":\n";
solve();
}
}