#include <bits/stdc++.h>
#define LL long long
#define ULL unsigned long long
#define pb push_back
#define st first
#define nd second
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
template <class T> T read(T &a) {
    a=0;char x=getchar();bool f=0;
    for(;x<'0'||x>'9';x=getchar())f|=x=='-';
	for(;x>='0'&&x<='9';x=getchar())a=(a<<3)+(a<<1)+x-'0';
    if(f)a=-a;
    return a;
}
using namespace std;

const int N = 2e5 + 5, MOD = 998244353;
LL pre[N << 1], apre[N << 1];
int n, m;

LL qpow(LL a, LL b = MOD - 2) {
    LL ans = 1;
    while (b) {
        if (b & 1) {
            ans = ans * a % MOD;
        }
        a = a * a % MOD;
        b >>= 1;
    }
    return ans;
}

void init() {
    pre[0] = 1;
    apre[0] = qpow(pre[0]);
    for (int i = 1; i <= N * 2; ++i) {
        pre[i] = pre[i - 1] * i % MOD;
        apre[i] = qpow(pre[i]);
    }
}

LL C(int a, int b) {
    return (pre[a] * apre[b] % MOD) * apre[a - b] % MOD;
}

int main() {
    init();
    read(n), read(m);
    LL ans = 0;
    for (int i = 1; i <= m; ++i) {
        LL val = i, now = 1;
        for (int j = 2; j * j <= val; ++j) {
            int cnt = 0;
            while (val % j == 0) {
                val /= j;
                cnt++;
            }
            now = now * C(n + cnt - 1, n - 1) % MOD;
        }
        if (val != 1) {
            now = now * C(n, n - 1) % MOD;
        }
        ans += now;
        ans %= MOD;
    }
    printf("%lld\n", ans);
	return 0;
}

#include <cstdio>
#include <cmath>
#include <iostream>
#include <iomanip>
#include <string>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <deque>
#include <stack>
#include <tuple>
#include <bitset>
using namespace std;

typedef long long ll;
const ll INF = 1000000000000000000 + 1;
const int MAX_N = 20 + 10;
ll A[MAX_N];

int main() {
  cin.tie(nullptr);
  ios::sync_with_stdio(false);

  int N;
  cin >> N;
  for (int i = 0; i < N; i++) cin >> A[i];

  ll ans = INF;
  
  for (int i = 0; i < (1<<N); i++) {

    ll res;
    int bit;

    res = A[0];
    if((i & 1) == 1) bit = 1;
    else bit = 0;

    vector<ll> v;
    
    for (int j = 1; j < N; j++) {
      if( ((i >> j) & 1) == bit){
	res |= A[j];
      }
      else {
	bit = (i>>j) & 1;
	v.push_back(res);
	res = A[j];
      }
    }
    v.push_back(res);
    
    ll xorval = v[0];
    for (int j = 1; j < v.size(); j++) {
      xorval ^= v[j];
    }
    ans = min(ans, xorval);
  }

  cout << ans << endl;
  return 0;
}

