#include <bits/stdc++.h>
using namespace std;
int gi() {
  int a;
  scanf("%d", &a);
  return a;
}
long long gli() {
  long long a;
  scanf("%I64d", &a);
  return a;
}
long long pw(long long a, long long b) {
  if (b == 0) return 1;
  long long x = pw(a, b / 2);
  if (b % 2) return (((x * x) % 1000003) * a) % 1000003;
  return (x * x) % 1000003;
}
long long inv(long long a) { return pw(a, 1000003 - 2); }
long long numdiv(long long a, long long b) {
  long long res = 0;
  while (a) {
    a /= 2;
    res += a;
  }
  return res;
}
long long fx(long long a) {
  if (a < 0) return a + 1000003;
  return a;
}
int main() {
  long long n = gli();
  long long k = gli();
  if (n <= 60 && k > (1LL << n)) {
    printf("1 1\n");
    return 0;
  }
  if (0 && k == 1) {
    printf("0 1\n");
    return 0;
  }
  long long todiv = pw(inv(2), numdiv(k - 1, 2));
  long long N = pw(2, n);
  long long d = (pw(N, k - 1) * todiv) % 1000003;
  long long neg = 0;
  if (k < 1000003) {
    neg = todiv;
    for (int i = 1; i < k; i++) neg = (neg * fx(N - i)) % 1000003;
  }
  printf("%lld %lld\n", fx(d - neg), d);
  return 0;
}
