#include<bits/stdc++.h>
using namespace std;
template<typename T>inline T read(){
	T f=0,x=0;char c=getchar();
	while(!isdigit(c)) f=c=='-',c=getchar();
	while(isdigit(c)) x=x*10+c-48,c=getchar();
	return f?-x:x;
}
namespace run{
	const int N=5e5+9,mod=998244353;
	inline int add(int x,int y){return x+y>=mod?x-mod+y:x+y;}
	inline int sub(int x,int y){return x>=y?x-y:x+mod-y;}
	inline int qpow(int x,int y){
		int ret=1;
		while(y){
			if(y&1) ret=1LL*x*ret%mod;
			x=1LL*x*x%mod,y>>=1;
		}
		return ret;
	}
	int fac[N],ifac[N],n,K;
	inline int C(int _n,int _m){
		if(_n<0 || _m<0 || _n<_m) return 0;
		return 1LL*fac[_n]*ifac[_m]%mod*ifac[_n-_m]%mod;
	}
	inline int calc(int R,int B){return sub(C(R+B,R),C(R+B,2*R-n+1));}

	int main(){
		n=read<int>(),K=read<int>();
		if(K<n) puts("0"),exit(0);
		fac[0]=ifac[0]=1;
		for(int i=1;i<=K;i++) fac[i]=1LL*fac[i-1]*i%mod;
		ifac[K]=qpow(fac[K],mod-2);
		for(int i=K-1;i>=1;i--) ifac[i]=1LL*ifac[i+1]*(i+1)%mod;

		int ans=0;
		for(int R=(K-1)/2+1;R<=K;R++){
			if(R==K-R) ans=add(ans,calc(R,K-R-1));
			else ans=add(ans,calc(R,K-R));
		}
		printf("%d\n",ans);
		return 0;
	}
}
int main(){
#ifdef my
	freopen(".in","r",stdin);
	freopen(".out","w",stdout);
#endif
	return run::main();
}