#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
const int mod = 998244353;
const int N = 3000 + 10;

LL dp[N][N];

LL f(LL n, LL k) {
	if(n < k) return 0;
	if(n == k) return 1;
	if(!n) return 0;
	if(!k) return 0;
	if(dp[n][k] != -1) return dp[n][k];
	return dp[n][k] = (f(n - 1, k - 1) + f(n, 2 * k)) % mod;
}

void solve() {
	memset(dp, -1, sizeof dp);
	LL n, k;
	scanf("%lld%lld", &n, &k);
	printf("%lld\n", f(n, k));
}

int main() {
	// freopen("in.txt", "r", stdin);
	solve();
	return 0;
}

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=3e3+5,mod=998244353;
int n,k;
ll dp[maxn][maxn];
int main(){
    scanf("%d%d",&n,&k);
    dp[0][0]=1;
    // dp[i][j]
    for(int i=1;i<=n;i++){
        for(int j=i;j>=1;j--){
            dp[i][j]=(dp[i-1][j-1]+(2*j<=i?dp[i][2*j]:0))%mod;
//            cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
        }
    }
//    for(int i=1;i<=k;i++){
//        for(int j=n;j>=1;j--){
//            dp[i][j]=(dp[i-1][j-1]+dp[i][2*j])%mod;
//            cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
//        }
//    }
    printf("%lld\n",dp[n][k]);
    return 0;
}
