#include <bits/stdc++.h>
using namespace std;
const int N = 1005, LN = 30;
const double PI = 4 * atan(1);
const long long mod = 7340033;
namespace FFT {
const int MAX = 1 << 20;
int N;
complex<double> omega[MAX];
complex<double> a1[MAX], a2[MAX];
complex<double> z1[MAX], z2[MAX];
void fft(complex<double> *a, complex<double> *z, int m = N) {
  if (m == 1) {
    z[0] = a[0];
  } else {
    int s = N / m;
    m /= 2;
    fft(a, z, m);
    fft(a + s, z + m, m);
    for (int i = 0; i < m; i++) {
      complex<double> c = omega[s * i] * z[m + i];
      z[m + i] = z[i] - c;
      z[i] += c;
    }
  }
}
void mult(long long *a, long long *b, long long *c, int len) {
  N = 2 * len;
  while (N & (N - 1)) ++N;
  assert(N <= MAX);
  for (int i = 0; i < N; i++) a2[i] = 0;
  for (int i = 0; i < N; i++) a1[i] = 0;
  for (int i = 0; i < len; i++) a1[i] = a[i];
  for (int i = 0; i < len; i++) a2[i] = b[i];
  for (int i = 0; i < N; i++) omega[i] = polar(1.0, 2 * PI / N * i);
  fft(a1, z1, N);
  fft(a2, z2, N);
  for (int i = 0; i < N; i++) omega[i] = complex<double>(1, 0) / omega[i];
  for (int i = 0; i < N; i++) a1[i] = z1[i] * z2[i] / complex<double>(N, 0);
  fft(a1, z1, N);
  for (int i = 0; i < 2 * len; i++) c[i] = round(z1[i].real());
}
void mult_mod(long long *a, long long *b, long long *c, int len,
              long long mod) {
  static long long a0[MAX], a1[MAX];
  static long long b0[MAX], b1[MAX];
  static long long c0[MAX], c1[MAX], c2[MAX];
  for (int i = 0; i < len; i++) a0[i] = a[i] & 0xFFFF;
  for (int i = 0; i < len; i++) a1[i] = a[i] >> 16;
  for (int i = 0; i < len; i++) b0[i] = b[i] & 0xFFFF;
  for (int i = 0; i < len; i++) b1[i] = b[i] >> 16;
  FFT::mult(a0, b0, c0, len);
  FFT::mult(a1, b1, c2, len);
  for (int i = 0; i < len; i++) a0[i] += a1[i];
  for (int i = 0; i < len; i++) b0[i] += b1[i];
  FFT::mult(a0, b0, c1, len);
  for (int i = 0; i < 2 * len; i++) c1[i] -= c0[i] + c2[i];
  for (int i = 0; i < 2 * len; i++) c1[i] %= mod;
  for (int i = 0; i < 2 * len; i++) c2[i] %= mod;
  for (int i = 0; i < 2 * len; i++)
    c[i] = (c0[i] + (c1[i] << 16) + (c2[i] << 32)) % mod;
}
}  // namespace FFT
long long dp[LN][2 * N];
void solve(int lvl) {
  auto &res = dp[lvl];
  long long tmp[2 * N];
  FFT::mult_mod(dp[lvl - 1], dp[lvl - 1], tmp, N, ::mod);
  FFT::mult_mod(tmp, tmp, res, N, ::mod);
  for (int i = N - 2; i >= 0; i--) {
    res[i + 1] = res[i];
  }
  res[0] = 1;
}
int main() {
  ios_base::sync_with_stdio(0);
  ;
  int T;
  cin >> T;
  dp[1][0] = 1;
  for (int i = 2; i <= LN - 1; i++) {
    solve(i);
  }
  while (T--) {
    int h = 0;
    int n, k;
    cin >> n >> k;
    while (n > 1 and n % 2 == 1) n /= 2, ++h;
    ++h;
    int ans = dp[h][k];
    cout << ans << endl;
  }
}
