#include <bits/stdc++.h>
const int mo = 7340033;
int g[13] = {1,       7340032, 5033755, 3926523, 5680261, 3570030, 3992801,
             3452570, 6546896, 6400576, 462337,  3033318, 905795};
int g_[13] = {1,       7340032, 2306278, 5338172, 5417516, 1291800, 422436,
              3283321, 2899895, 7331298, 5844488, 7127175, 2274734};
int t[4096], x[4096], y[4096];
bool k;
void dft(int l, int r, int p, int d) {
  if (l == r)
    y[l] = x[p];
  else {
    int m = (l + r) >> 1, tg = 1, ng = k ? g_[12 - d] : g[12 - d];
    dft(l, m, p, d + 1), dft(m + 1, r, p | 1 << d, d + 1);
    for (int i = l; i <= m; ++i, tg = (long long)tg * ng % mo)
      t[i] = (y[i] + (long long)tg * y[m + 1 + i - l]) % mo;
    for (int i = m + 1; i <= r; ++i, tg = (long long)tg * ng % mo)
      t[i] = (y[l + i - m - 1] + (long long)tg * y[i]) % mo;
    for (int i = l; i <= r; ++i) y[i] = t[i];
  }
}
int f[29][1010], q, n, m, c;
int main() {
  f[0][0] = 1;
  for (int i = 1; i <= 28; ++i) {
    for (int j = 1001; j < 4096; ++j) x[j] = 0;
    for (int j = 0; j <= 1000; ++j) x[j] = f[i - 1][j];
    k = 0, dft(0, 4095, 0, 0);
    for (int j = 0; j < 4096; ++j) {
      y[j] = (long long)y[j] * y[j] % mo;
      x[j] = (long long)y[j] * y[j] % mo;
    }
    k = 1, dft(0, 4095, 0, 0);
    for (int j = 0; j < 1000; ++j) f[i][j + 1] = (long long)7338241 * y[j] % mo;
    f[i][0] = 1;
  }
  scanf("%d", &q);
  while (q--) {
    scanf("%d%d", &n, &m), c = 0;
    while (n > 1 && n & 1) n >>= 1, ++c;
    printf("%d\n", f[c][m]);
  }
  return 0;
}
