#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10, M = 30;
int ch[N][M + 5], size[M * N + 10], tot = 1, tag;
inline void insert(int x) {
  int p = 1;
  for (int i = M; i >= 0; i--) {
    size[p]++;
    if ((x >> i) & 1) {
      if (!ch[p][1]) ch[p][1] = ++tot;
      p = ch[p][1];
    } else {
      if (!ch[p][0]) ch[p][0] = ++tot;
      p = ch[p][0];
    }
  }
  size[p]++;
}
inline int query(void) {
  int ans = 0, p = 1;
  for (int i = M; i >= 0; i--)
    if ((tag >> i) & 1) {
      if (!ch[p][1])
        return ans;
      else if (size[ch[p][1]] < (1 << i))
        p = ch[p][1];
      else
        ans += (1 << i), p = ch[p][0];
    } else {
      if (!ch[p][0])
        return ans;
      else if (size[ch[p][0]] < (1 << i))
        p = ch[p][0];
      else
        ans += (1 << i), p = ch[p][1];
    }
  return ans;
}
int n, m, a[N];
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  sort(a + 1, a + n + 1);
  n = unique(a + 1, a + n + 1) - a - 1;
  for (int i = 1; i <= n; i++) insert(a[i]);
  while (m--) {
    int x;
    scanf("%d", &x);
    tag ^= x;
    printf("%d\n", query());
  }
  return 0;
}
