#include <cstdio>
#include <cstring>
using namespace std;
#define Mod 998244353
#define N 200050
int n,i,f[2*N],c[N];
long long m;
struct matrix{
	int a[2][2];
	matrix operator * (const matrix &jb)const{
		matrix cll;memset(cll.a,0,sizeof(cll.a));
		for (int ii=0;ii<2;ii++)
		for (int jj=0;jj<2;jj++)
		for (int kk=0;kk<2;kk++) cll.a[ii][jj]=(cll.a[ii][jj]+1LL*a[ii][kk]*jb.a[kk][jj] % Mod) % Mod;
		return cll;
	}
};
int qmi(int di,int zhi)
{
	int ret=1,x=di;
	while (zhi){
		if (zhi & 1) ret=1LL*ret*x % Mod;x=1LL*x*x % Mod;zhi>>=1;
	}return ret;
}
int main()
{
	scanf("%d%lld",&n,&m);
	n--;matrix gh;gh.a[1][0]=gh.a[1][1]=gh.a[0][0]=0;gh.a[0][1]=1;
	long long zhi=2*n+m-1;matrix x;x.a[0][0]=0;x.a[0][1]=x.a[1][0]=x.a[1][1]=1;
	while (zhi){
		if (zhi & 1) gh=gh*x;x=x*x;zhi>>=1;
	}int ans=gh.a[0][1];f[1]=1;f[2]=1;
	for (i=3;i<=2*n;i++) f[i]=(f[i-1]+f[i-2]) % Mod;
	c[0]=1;for (i=1;i<=n;i++) c[i]=(1LL*c[i-1]*((m-1+i) % Mod) % Mod)*qmi(i,Mod-2) % Mod;
	for (i=1;i<=n;i++) ans=(ans-1LL*f[2*i]*c[n-i] % Mod) % Mod;
	printf("%d\n",(ans+Mod) % Mod);
	return 0;
}