#include<bits/stdc++.h>
//#include<atcoder/all>
using namespace std;
//using namespace atcoder;
#define fs first
#define sc second
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define ALL(A) A.begin(),A.end()
#define RALL(A) A.rbegin(),A.rend()
typedef long long ll;
typedef pair<ll,ll> P;
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
template<typename T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
const ll mod=998244353;
const ll LINF=1ll<<60;
const int INF=1<<30;
int dx[]={1,0,-1,0,1,-1,1,-1};
int dy[]={0,1,0,-1,1,-1,-1,1};

ll dp[3001][6001];

ll rec(ll n, ll k){
    if(n < k) return 0;
    if(k == 0){
        if(n == 0) return 1;
        else return 0;
    }
    if(~dp[n][k]) return dp[n][k];
    ll ret = (rec(n - 1, k - 1) + rec(n, 2 * k)) %mod;
    return dp[n][k] = ret;
}

int main(){
    memset(dp, -1, sizeof(dp));
    ll n, k;cin >> n >> k;
    cout << rec(n, k) << endl;
    return 0;
}

/*
 * @Author: RBQRBQ
 * @Date: 2020-11-02 10:48:40
 * @LastEditors: RBQRBQ
 * @LastEditTime: 2020-11-02 11:02:18
 */
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> VI;
typedef pair<int,int> pii;
namespace IO{
    template<typename T>inline void read(T &x){
        x=0;ll f=1;char ch=getchar();
        while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
        while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
        x=x*f;
    }
}
using namespace IO;
const ll mod (998244353);
ll mul(ll a,ll b)
{
    return 1ll*a*b%mod;
}
ll dp[4000][4000];
ll n,k;
int main()
{
    read(n),read(k);
    for(int i=0;i<=3999;i++)
    for(int j=0;j<=3999;j++)
    if(i<j) dp[i][j]=0;
    for(int i=0;i<=3999;i++)
    dp[i][i]=1;
    for(int i=1;i<=3999;i++)
    for(int j=3999;j>=1;j--)
    if(2*j<=3999)
    dp[i][j]=(dp[i-1][j-1]+dp[i][2*j])%mod;
    else
    {
        dp[i][j]=dp[i-1][j-1];
    }
    
    cout<<dp[n][k];
}