#include <bits/stdc++.h>
using namespace std;
pair<int, int> p[1009];
int ans[1009];
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }
long long f(long long x) {
  long long ans = 0;
  for (long long i = 30ll; i >= 0ll; i--) {
    if (((1ll << i) & x)) {
      for (long long j = i; j >= 0ll; j--) {
        if (!((1ll << j) & x)) {
          ans += (1ll << j);
        }
      }
      break;
    }
  }
  return ans;
}
map<long long, int> ans2;
void brute() {
  ans2[1] = 0, ans2[3] = 1, ans2[7] = 1, ans2[15] = 5, ans2[31] = 1,
  ans2[63] = 21, ans2[127] = 1, ans2[255] = 85, ans2[511] = 73,
  ans2[1023] = 341, ans2[2047] = 89, ans2[4095] = 1365, ans2[8191] = 1,
  ans2[16383] = 5461, ans2[32767] = 4681, ans2[65535] = 21845, ans2[131071] = 1,
  ans2[262143] = 87381, ans2[524287] = 1, ans2[1048575] = 349525,
  ans2[2097151] = 299593, ans2[4194303] = 1398101, ans2[8388607] = 178481,
  ans2[16777215] = 5592405, ans2[33554431] = 1082401;
}
int main() {
  int q;
  cin >> q;
  brute();
  for (int i = 0; i < q; i++) {
    int x;
    cin >> x;
    long long y = f(x);
    if (y == 0)
      cout << ans2[x] << endl;
    else
      cout << gcd(x ^ y, x & y) << endl;
  }
}
