#include <bits/stdc++.h>
const int oo = 2139063143;
const int N = 42000;
const int P = 7340033;
using namespace std;
template <typename T>
inline void sc(T &x) {
  x = 0;
  static int p;
  p = 1;
  static char c;
  c = getchar();
  while (!isdigit(c)) {
    if (c == '-') p = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c - 48);
    c = getchar();
  }
  x *= p;
}
template <typename T>
inline void print(T x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) print(x / 10);
  putchar(x % 10 + '0');
}
template <typename T>
inline void pr(T x) {
  print(x), putchar('\n');
}
int del(int x) { return x >= P ? x - P : x; }
void add(int &x, int y) { x = del(x + y); }
int ksm(int a, int b) {
  int ans = 1;
  while (b) {
    if (b & 1) ans = (long long)ans * a % P;
    a = (long long)a * a % P, b >>= 1;
  }
  return ans;
}
int rev[N], nv;
void ntt(int *a, int n, int kind) {
  for (int i = 0; i < n; i++)
    if (i < rev[i]) swap(a[i], a[rev[i]]);
  for (int i = 1; i < n; i <<= 1) {
    const int sb = i << 1, gn = ksm(3, (P - 1) / sb);
    for (int j = 0; j < n; j += sb) {
      int g = 1;
      for (int k = j; k < j + i; k++) {
        const int x = a[k], y = (long long)g * a[k + i] % P;
        a[k] = del(x + y), a[k + i] = del(x - y + P);
        g = (long long)g * gn % P;
      }
    }
  }
  if (kind == -1) {
    reverse(a + 1, a + n);
    for (int i = 0; i < n; i++) a[i] = (long long)a[i] * nv % P;
  }
}
int init(int n) {
  int bit = 0, s = 1;
  while (s <= n) s <<= 1, ++bit;
  for (int i = 0; i < s; i++)
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (bit - 1));
  nv = ksm(s, P - 2);
  return s;
}
int f[35][N], g[N];
int main() {
  f[0][0] = g[0] = 1;
  int l = 1001, s = init(l * 4);
  for (int i = 1; i <= 30; i++) {
    ntt(g, s, 1);
    for (int j = 0; j < s; j++) g[j] = ksm(g[j], 4);
    ntt(g, s, -1);
    for (int j = l - 1; j >= 0; j--) g[j + 1] = g[j];
    for (int j = l; j < s; j++) g[j] = 0;
    memcpy(f[i], g, sizeof(int) * l);
  }
  int q;
  sc(q);
  while (q--) {
    int n, k;
    sc(n), sc(k);
    int s = 0;
    while (n & 1) ++s, n >>= 1;
    s -= !n;
    if (s < 0)
      pr(!k);
    else
      pr(f[s][k]);
  }
  return 0;
}
