#include <bits/stdc++.h>
using namespace std;
const int mod = 1e6 + 3;
long long get(long long n) {
  if (!n) return 0;
  return n / 2 + get(n / 2);
}
long long qp(long long r, long long n) {
  long long ans = 1;
  r %= mod;
  while (n) {
    if (n & 1) (ans *= r) %= mod;
    (r *= r) %= mod;
    n >>= 1;
  }
  return ans;
}
int main() {
  long long n, k;
  scanf("%I64d%I64d", &n, &k);
  k--;
  long long num = get(k);
  long long cur = 1;
  int ok = 0;
  for (int i = 1; i <= n; i++) {
    cur <<= 1;
    if (cur > k) {
      ok = 1;
      break;
    }
  }
  if (!ok) {
    printf("1 1\n");
  } else {
    long long now = ((qp(2, n) - k) % mod + mod) % mod, ans = 1;
    int flag = 1;
    for (int i = 0; i <= k - 1; i++) {
      if (!now) {
        flag = 0;
        break;
      }
      (ans *= now) %= mod;
      (++now) %= mod;
    }
    if (!flag) ans = 0;
    long long m = ((k % (mod - 1)) * (n % (mod - 1))) % (mod - 1);
    long long a = qp(2, m + mod - 1) - ans;
    ((a %= mod) += mod) %= mod;
    num = qp(2, num);
    num = qp(num, mod - 2);
    (a *= num) %= mod;
    long long b = qp(2, m + mod - 1);
    (b *= num) %= mod;
    ((a %= mod) += mod) %= mod;
    ((b %= mod) += mod) %= mod;
    printf("%I64d %I64d\n", a, b);
  }
  return 0;
}
