#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef long double ld;
#define rep(i,a,b)  for(ll i=a;i<b;i++)
#define nl cout<<endl

#define pii pair<ll,ll>
#define vi  vector<ll>
#define vii vector<pii>
#define mi  map<ll,ll>
#define all(a)  (a).begin(),(a).end()

#define pb push_back
#define ff first
#define ss second
#define hell 1000000007

#define test4(x,y,z,a) cout<<"x is "<<x<<"		y is "<<y<<"		z is "<<z<<"		a is "<<a<<endl;
#define test3(x,y,z) cout<<"x is "<<x<<"		y is "<<y<<"		z is "<<z<<endl;
#define test2(x,y) cout<<"x is "<<x<<"		y is "<<y<<endl;
#define test1(x) cout<<"x is "<<x<<endl;
#define N 3002

ll power(ll a,ll b,ll m)
{
	ll ans=1;
	while(b)
	{
		if(b&1)
			ans=(ans*a)%m;
		b/=2;
		a=(a*a)%m;
	}
	return ans;
}
ll dp[N][N];
ll go(ll left,ll sum) {
	if(sum == left) {
		return 1;
	}
	if(sum > left) {
		return 0;
	}
	if(left <= 0 or sum <= 0) {
		return 0;
	}
	/*if(sum < 0)
		return 0;*/
	//test2(left,sum);
	if(dp[left][sum] != -1)
		return dp[left][sum];
	ll ans = go(left-1,sum-1) + go(left,2*sum);
	ans %= 998244353;
/*	if(2*sum <= n)
		ans += go(left,sum);*/
	return dp[left][sum] = ans;
}
int main()
{	
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
        
	ll n,k;cin>>n>>k;
	memset(dp,-1,sizeof(dp));
	ll ans = go(n,k);
	cout<<ans<<endl;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long D;
const int maxn=3003,mod=998244353;
int Plus(int x,int y){return (x+=y)>=mod?x-mod:x;}
int n,k,a[maxn],dp[maxn][maxn];
int main(){
	scanf("%d%d",&n,&k);
	dp[0][0]=1;
	for(int i=1;i<=n;i++){
		for(int j=i;j>=1;j--){
			dp[i][j]=Plus(dp[i-1][j-1],(j<<1)<=i?dp[i][j<<1]:0);
		}
	}
	printf("%d\n",dp[n][k]);
	return 0;
}