#include <bits/stdc++.h>
using namespace std;
#define forr(i,m,n) for (int i=(m); i<=(n); i++)
#define forv(i,m,n) for (int i=(m); i>=(n); i--)
#define forall(it,p) for (auto it = p.begin(); it != p.end(); ++it)
#define R 998244353
#define DBG 1
typedef pair<int,int> pii;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<ll,pll> pl3;

#define MAXN 100000
int a[MAXN];

unordered_map<ll,ll> h;
unordered_map<ll,ll> g;

ll f(int n, int k) {
  if (n==k) return 1;
  if (n<k || k==0) return 0;
  auto p = h.find((n<<16)|k);
  if (p!=h.end()) return p->second;
  ll sm = 0;
  int stt = max(0,2*k-n);
  vector<pl3> q;
  forr(i,stt,k) {
    int nn = n-i;
    int kk = 2*(k-i);
    auto p = g.find((nn<<16)|kk);
    if (p!=g.end()) {
      sm = p->second;
      break;
    } else {
      ll v = f(nn,kk);
      q.push_back(pl3(nn,pll(kk,v)));
    }
  }
  while (q.size()>0) {
      int nn = q.back().first;
      int kk = q.back().second.first;
      ll v = q.back().second.second;
      q.pop_back();
      sm = (sm+v)%R;
      g[(nn<<16)|kk] = sm;
  }
  h[(n<<16)|k] = sm;
  return sm;
}

int main() {
  int n,k;
  cin >> n >> k;
  cout << f(n,k) << endl;
}

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;
int dp[3005][3005];
signed main(){
	int n,k;
	cin>>n>>k;	
	dp[0][0]=1;	
	for(int i=1;i<=n;i++){
		for(int j=i;j>=1;j--){
			dp[i][j]=(dp[i-1][j-1]+dp[i][j*2])%mod;
		}
	}	
	cout<<dp[n][k];
	return 0;
}
