#include <bits/stdc++.h>
using namespace std;

#define FastIO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

#define ll long long
#define ull unsigned long long
#define ld long double
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define fi first
#define se second

#define sz(v) ((int)(v).size())
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define clr(v, d) memset(v, d, sizeof(v))

#define forn(i, e) for (int i = 0; i < e; i++)
#define fors(i, s, e) for (int i = s; i < e; i++)
#define rforn(i, s) for (int i = s; i >= 0; i--)
#define rfors(i, s, e) for (int i = s; i >= e; i--)

#define msb(x) (63 - __builtin_clzll((long long)(x)))
#define lsb(x) (__builtin_ctzll((unsigned long long)(x)))
#define bit_count(x) (__builtin_popcountll((unsigned long long)(x)))

#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x << " = " << (x) << '\n';
#else
#define debug(x)
#endif

typedef vector<int>       vi;
typedef vector<double>    vd;
typedef vector< vi >      vvi;
typedef vector< vd >      vvd;
typedef vector<string>    vs;

const int INF = 1e9 + 7;
const ll LINF = 1e18 + 7;
const double EPS = 1e-9;
const int MAXN = 1e6 + 5;
const int LOG = 20;
// #define int ll

const int dx[] = {-1, 1, 0, 0, -1, -1, 1, 1};
const int dy[] = {0, 0, -1, 1, -1, 1, -1, 1};

struct BinaryTrie {
    struct Node {
        int ch[2] {-1,-1};
        int mn = INT_MAX;
    };

    vector<Node> trie;

    BinaryTrie() {trie.emplace_back();}

    void insert(int val,int i) {
        int u = 0;
        trie[u].mn = min(trie[u].mn, i);
        for (int b = 29;b >= 0; b--) {
            int bit = (val >> b) & 1;
            if (trie[u].ch[bit] == -1) {
                trie[u].ch[bit] = sz(trie);
                trie.emplace_back();
            }
            u = trie[u].ch[bit];
            trie[u].mn = min(trie[u].mn, i);
        }
    }

    int earliestAtLeast(int val,int x) {
        int u = 0,ans = INT_MAX;
        for (int b = 29;b >= 0 && u != -1; b--) {
            int bv = (val >> b) & 1;
            int bx = (x >> b) & 1;

            if (bx == 1) {
                u = trie[u].ch[bv ^ 1];
            }else {
                int greater = trie[u].ch[bv ^ 1];
                if (greater != -1) {
                    ans = min(ans,trie[greater].mn);
                }
                u = trie[u].ch[bv];
            }
        }
        if (u != -1) {
            ans = min(ans,trie[u].mn);
        }
        return ans;
    }
};

void solve() {
    int n,x; cin >> n >> x;

    BinaryTrie tr;
    tr.insert(0,0);

    int pref = 0,best_len = 0,best_start = 1;
    for (int r = 1;r <= n;r++) {
        int a;
        cin >> a;
        pref ^= a;

        int j = tr.earliestAtLeast(pref,x);
        if (j != INT_MAX) {
            int s = j + 1;
            int len = r - j;

            if (len > best_len || (len == best_len && s < best_start)) {
                best_len = len;
                best_start = s;
            }
            tr.insert(pref,r);
        }
    }

    cout << best_start << " " << best_len << endl;
}






signed main() {
#ifndef ONLINE_JUDGE
    freopen("c.in", "r", stdin);
    freopen("c.out", "w", stdout);
#endif

    FastIO
    int tc = 1;
    // cin >> tc;


    while (tc--) {
        solve();
    }


    return 0;
}