#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pll;
#define fastio ios::sync_with_stdio(false), cin.tie(0)
#pragma GCC optimize("Ofast")
#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define REP(i, n) FOR(i, 0, n)
#define REP1(i, n) FOR(i, 0, n + 1)
#define pb push_back
#define pf push_front
#define eb emplace_back
#define f first
#define s second
#define lowbit(x) x&-x
#define int long long
#define ckmin(a, b) a = min(a, b)
#define ckmax(a, b) a = max(a, b)
const int N = 1e9 + 7;
const int mod = 30011;
ll fpow(ll a, ll b){
ll ret = 1;
while(b > 0){
if(b & 1) ret = ret * a % mod;
a = a * a % mod;
b >>= 1;
}
return ret;
}
void fwt(vector<int> &a){
int n = 1;
while(n < a.size()) n *= 2;
a.resize(n);
for(int len = 1; 2 * len <= n; len <<= 1){
for(int i = 0; i < n; i += 2 * len){
for(int j = 0; j < len; j++){
int u = a[i + j], v = a[i + j + len];
a[i + j] = (u + v) % mod, a[i + j + len] = (u - v) % mod;
}
}
}
}
signed main(void){
fastio;
int n, k;
cin>>n>>k;
vector<int> a(k + 1);
for(int i = 0; i <= k; i++) a[i] = 1;
fwt(a);
for(int i = 0; i < a.size(); i++) a[i] = fpow(a[i], n);
fwt(a);
int inv = fpow(a.size(), mod - 2);
cout<<(fpow(k + 1, n) - a[0] * inv % mod + mod) % mod;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGxsOwojZGVmaW5lIGZhc3RpbyBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSksIGNpbi50aWUoMCkKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI2RlZmluZSBGT1IoaSwgYSwgYikgZm9yKGludCBpID0gKGEpOyBpIDwgKGIpOyBpKyspCiNkZWZpbmUgUkVQKGksIG4pIEZPUihpLCAwLCBuKQojZGVmaW5lIFJFUDEoaSwgbikgRk9SKGksIDAsIG4gKyAxKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIHBmIHB1c2hfZnJvbnQKI2RlZmluZSBlYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBmIGZpcnN0CiNkZWZpbmUgcyBzZWNvbmQKI2RlZmluZSBsb3diaXQoeCkgeCYteAojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBja21pbihhLCBiKSBhID0gbWluKGEsIGIpCiNkZWZpbmUgY2ttYXgoYSwgYikgYSA9IG1heChhLCBiKQpjb25zdCBpbnQgTiA9IDFlOSArIDc7CmNvbnN0IGludCBtb2QgPSAzMDAxMTsKCmxsIGZwb3cobGwgYSwgbGwgYil7CglsbCByZXQgPSAxOwoJd2hpbGUoYiA+IDApewoJCWlmKGIgJiAxKSByZXQgPSByZXQgKiBhICUgbW9kOwoJCWEgPSBhICogYSAlIG1vZDsKCQliID4+PSAxOwoJfQoJcmV0dXJuIHJldDsKfQoKdm9pZCBmd3QodmVjdG9yPGludD4gJmEpewoJaW50IG4gPSAxOwoJd2hpbGUobiA8IGEuc2l6ZSgpKSBuICo9IDI7CglhLnJlc2l6ZShuKTsKCWZvcihpbnQgbGVuID0gMTsgMiAqIGxlbiA8PSBuOyBsZW4gPDw9IDEpewoJCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpICs9IDIgKiBsZW4pewoJCQlmb3IoaW50IGogPSAwOyBqIDwgbGVuOyBqKyspewoJCQkJaW50IHUgPSBhW2kgKyBqXSwgdiA9IGFbaSArIGogKyBsZW5dOwoJCQkJYVtpICsgal0gPSAodSArIHYpICUgbW9kLCBhW2kgKyBqICsgbGVuXSA9ICh1IC0gdikgJSBtb2Q7CgkJCX0KCQl9Cgl9Cn0KCnNpZ25lZCBtYWluKHZvaWQpewoJZmFzdGlvOwoJaW50IG4sIGs7CgljaW4+Pm4+Pms7Cgl2ZWN0b3I8aW50PiBhKGsgKyAxKTsKCWZvcihpbnQgaSA9IDA7IGkgPD0gazsgaSsrKSBhW2ldID0gMTsKCWZ3dChhKTsKCWZvcihpbnQgaSA9IDA7IGkgPCBhLnNpemUoKTsgaSsrKSBhW2ldID0gZnBvdyhhW2ldLCBuKTsKCWZ3dChhKTsKCWludCBpbnYgPSBmcG93KGEuc2l6ZSgpLCBtb2QgLSAyKTsKCWNvdXQ8PChmcG93KGsgKyAxLCBuKSAtIGFbMF0gKiBpbnYgJSBtb2QgKyBtb2QpICUgbW9kOwp9