#ifdef DEBUG
#define _GLIBCXX_DEBUG
#endif
//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef long long ll;
const int mod = 998244353;
int mult(int a, int b) {
    return (1LL * a * b) % mod;
}
int sum(int a, int b) {
    int s = a + b;
    if (s >= mod) s -= mod;
    return s;
}
int sub(int a, int b) {
    int s = a - b;
    if (s < 0) s += mod;
    return s;
}
const int maxN = 3005;
int dp[maxN][maxN];
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
//    freopen("input.txt", "r", stdin);
    int n, k;
    cin >> n >> k;
    dp[0][0] = 1;
    for (int cnt = 1; cnt <= n; cnt++) {
        for (int s = cnt; s >= 1; s--) {
            dp[cnt][s] = dp[cnt - 1][s - 1];
            if (cnt >= 2 * s) {
                dp[cnt][s] = sum(dp[cnt][s], dp[cnt][2 * s]);
            }
        }
    }
    cout << dp[n][k];
    return 0;
}
#include<bits/stdc++.h>
#define it register int
#define ct const int
#define il inline
using namespace std;
typedef long long ll;
#define rll register ll
#define cll const ll
const int N=5005;
#define P 998244353
int fac[N],sz[N],k,n,cnt,ans,f[N][N];
il void mo(it&p,ct q){p+=q,p=(p>=P?p-P:p);}
int main(){
	//freopen("a.in","r",stdin);
	//freopen("a.out","w",stdout);
	scanf("%d%d",&n,&k);it i,j;
	if(k==n) return puts("1"),0;
	f[0][0]=1;
	for(j=1;j<=n;++j)
		for(i=1;i<=j;++i){
			f[i][j]=f[i-1][j-1];
			if((i<<1)<=j-i) mo(f[i][j],f[i<<1][j-i]);
			if((i-1<<1|1)<=j-i) mo(f[i][j],f[i-1<<1|1][j-i]);
		}
	for(i=1;i<=k;++i) mo(ans,f[i][n-k]);
	printf("%d",ans); 
	return 0;
}
