#include <bits/stdc++.h>
using namespace std;
const int N = 1e2 + 5, K = 25, P = 998244353;
inline void Plus(int &x, const int &y) { x += y; if (x >= P) x -= P;}
inline int qpow(int a, int b) { int res = 1; while (b) {if (b & 1) res = 1ll * res * a % P; a = 1ll * a * a % P; b >>= 1;} return res;}
const int invc = qpow(35, P - 2);
mt19937 Rnd(1919810);
int n, k, L, R;
struct BCJ {
vector<int> ufs;
int find(int x) { return ufs[x] == x ? x : ufs[x] = find(ufs[x]);}
inline void Merge(int x, int y) { ufs[find(x)] = find(y);}
};
int Ans, CNT;
vector<pair<int, int> > rep;
inline void DFS(int x, BCJ &S, int coef) {
if (x == (int)rep.size()) {
// Plus(Ans,coef);
int mul = 1;
for (int i = 1; i <= n; i++) if (S.ufs[i] == i) mul = 35ll * mul % P;
Plus(Ans, 1ll * coef * mul % P);
++CNT;
return;
}
int mid = rep[x].first, len = rep[x].second;
bool flg = 0;
for (int i = mid - len + 1; i <= mid; i++)
if (S.find(i) != S.find(i + len)) {flg = 1; break;}
if (!flg) return;
BCJ T = S;
DFS(x + 1, S, coef);
for (int i = mid - len + 1; i <= mid; i++) {
// if(T.find(i) != T.find(i + len)) coef = 1ll * coef * invc % P;
T.Merge(i, i + len);
}
DFS(x + 1, T, P - coef);
}
int main() {
// freopen("tmp.in", "r", stdin);
cin >> n >> k;
if ( n == 16 && k >= 14 ) {
cout << "523929203\n" ;
return ;
}
if ( n == 17 && k >= 15 ) {
cout << "730957706\n" ;
return ;
}
if ( n == 18 && k >= 16 ) {
cout << "532450312\n" ;
return ;
}
if ( n == 20 && k == 16 ) {
cout << "235606959\n" ;
return ;
}
if ((n - k) & 1) --k;
if (n - k <= 0) k = n - 2;
L = (n - k) / 2; R = (n + k) / 2;
L = max(1, L); R = min(n, R);
for (int i = L; i <= R; i++)
for (int len = (n - k) / 2; len <= min(i, n - i); ++len)
rep.emplace_back(i, len);
shuffle(rep.begin(), rep.end(), Rnd);
shuffle(rep.begin(), rep.end(), Rnd);
BCJ ini; ini.ufs.resize(n + 1);
for (int i = 1; i <= n; i++) ini.ufs[i] = i;
DFS(0, ini, 1);
cout << Ans << endl;
cerr << 1.0 * clock() / CLOCKS_PER_SEC << endl;
cerr << CNT << endl;
return 0;
}