#include <bits/stdc++.h>
inline int getInt() {
  int s;
  scanf("%d", &s);
  return s;
}
using namespace std;
const int mod = 7340033;
int calcMax(int n) {
  int ret = 0;
  while (n > 1 && (n - 1) % 2 == 0) {
    ret++;
    n = (n - 1) / 2;
  }
  return ret;
}
int memo[32][4][1024];
int solve2(int, int, int);
inline int solve(int n, int f, int m) {
  if (m == 0) return 1;
  if (f == 4) return 0;
  if (n == 0) return 0;
  if (memo[n][f][m] != -1) return memo[n][f][m];
  return solve2(n, f, m);
}
int solve2(int n, int f, int m) {
  long long ret = 0;
  if (f == 0) {
    for (int i = 0; i < (int)(m); i++) {
      long long tmp = 1;
      tmp *= solve(n - 1, 0, i);
      if (tmp > mod) tmp %= mod;
      tmp *= solve(n, f + 1, m - 1 - i);
      if (tmp > mod) tmp %= mod;
      ret += tmp;
      if (ret > mod) ret -= mod;
    }
  } else {
    for (int i = 0; i < (int)(m + 1); i++) {
      long long tmp = 1;
      tmp *= solve(n - 1, 0, i);
      if (tmp > mod) tmp %= mod;
      tmp *= solve(n, f + 1, m - i);
      if (tmp > mod) tmp %= mod;
      ret += tmp;
      if (ret > mod) ret -= mod;
    }
  }
  return memo[n][f][m] = ret;
}
int main() {
  const int q = getInt();
  memset(memo, -1, sizeof(memo));
  for (int cc = 0; cc < (int)(q); cc++) {
    const int n = getInt();
    const int k = getInt();
    const int mx = calcMax(n);
    printf("%d\n", solve(mx, 0, k));
  }
  return 0;
}
