//with some help ( was close )
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl "\n"
#define sz(a) int((a).size())
void saudox() {
ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
}
#define printvec(v) for(int i=0;i<v.size();i++){cout<<v[i]<<" ";}cout<<endl;
#define read(v,n) for(int i=0;i<n;i++){cin>>v[i];}
typedef vector<ll> vi;
typedef vector<vi> vii;
typedef pair<ll,ll> pi;
typedef vector<pi> vip;
typedef map<ll,ll> mapi;
#define all(v) ((v).begin()), ((v).end())
#define rall(v) ((v).rbegin()), ((v).rend())
int dx[] = {0, 0, 1, -1};
int dy[] = {-1, 1, 0, 0};
const int N = 5e3+5, M = 1e4 + 5, OO = 0x3f3f3f3f, mod = 1e9 + 7;
struct Node {
int minIdx=1e9;
array<int,2> nxt{-1,-1};
};
struct Trie {
vector<Node>trie;
int sz;
Trie() {
sz = 0;
addNode();
}
int addNode() {
trie.emplace_back();
return sz++;
}
void insert(int num,int idx) {
int cur=0;
for (int i=30; i>=0; i--) {
int bit = (num>>i)&1;
if (trie[cur].nxt[bit]==-1) {
trie[cur].nxt[bit] = addNode();
}
cur = trie[cur].nxt[bit];
trie[cur].minIdx = min(trie[cur].minIdx,idx);
}
}
int query(int num, int x) {
int cur=0,ans=1e18;
for(int i=30;i>=0;i--) {
int bit = (num>>i)&1;
int xbit = (x>>i)&1;
if (xbit) {
if (trie[cur].nxt[bit^1]!=-1) {
cur = trie[cur].nxt[bit^1];
}else return ans;
}
else {
if (trie[cur].nxt[bit^1]!=-1) {
ans=min(ans, trie[trie[cur].nxt[bit^1]].minIdx);
}
if (trie[cur].nxt[bit]!=-1) {
cur = trie[cur].nxt[bit];
}
else return ans;
}
}
ans=min(ans, trie[cur].minIdx);
return ans;
}
};
int32_t main() {
saudox();
int tt = 1;//cin>>tt;
while (tt--) {
int n,x;cin >> n >> x;
vi v(n);read(v,n);
vi pref(n+1,0);
for (int i=1;i<=n;i++) {
pref[i] = pref[i-1] ^ v[i-1];
}
Trie trie;
trie.insert(0,0);
int strt=-1,k = -1;
for (int i=1;i<=n;i++) {
int ret = trie.query(pref[i],x);
if (ret!=1e18 && i-ret > k) {
strt = ret+1;
k = i-ret;
}
trie.insert(pref[i],i);
}
cout << strt << ' ' << k << endl;
}
}