#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
int mod=998244353;
int n,k,f[3010][3010];//ÌîÁË¼¸¸öÊý£¬µ±Ç°²î¶àÉÙ¸öÊý 
int main()
{
	scanf("%d %d",&n,&k);
	//for(int i=0;i<=k;i++) f[i][k-i]=1;
	f[0][k]=1;
	for(int i=0;i<n;i++)
		for(int j=1;j<=n;j++) if(f[i][j])
		{
			if(2*j<=n) (f[i][2*j]+=f[i][j])%=mod;
			(f[i+1][j-1]+=f[i][j])%=mod;
		}
	printf("%d",f[n][0]);
}
#include <bits/stdc++.h>
using namespace std;
#define debug(x) cout << #x <<": " << x << '\n';
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define mp make_pair
#define pb push_back
#define sz(x) (int)(x).size()
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, int> pli;
typedef pair<ll, ll> pll;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
const int N = 3030;
const int mod = 998244353;
int dp[N][N];
int add(int a, int b) {
    a += b;
    if (a >= mod) a -= mod;
    return a;
}
int f(int n, int k) {
    if (k > n) return 0;
    if (k == n) return 1;
    if (k == 0) return 0;
    if (dp[n][k] != -1) return dp[n][k];
    return dp[n][k] = add(f(n - 1, k - 1), f(n, k * 2));
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int n, k;
    cin >> n >> k;
    memset(dp, 255, sizeof dp);
    cout << f(n, k);
    return 0;
}
