#include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair P; #define fi first #define se second #define repl(i,a,b) for(ll i=(ll)(a);i<(ll)(b);i++) #define rep(i,n) repl(i,0,n) #define all(x) (x).begin(),(x).end() #define dbg(x) cout<<#x"="<y?x:y) #define mmin(x,y) (x > operator*(const vector >& a,const vector >& b){ vector > res(m+1,vector(2,0)); rep(i,m+1)rep(j,2){ res[i][j]=(a[i][0]*b[0][j]%mod+a[i][1]*b[1][j]%mod)%mod; } (res[m][0]+=b[m][0])%=mod; (res[m][1]+=b[m][1])%=mod; return res; } int main(){ cin>>n>>m; vector > a(m+1,vector(2,0)); ll f0=0,f1=1; rep(i,m+1){ a[m-i][0]=f1; a[m-i][1]=f0; ll f2=(f1+f0)%mod; f0=f1; f1=f2; } f0=0,f1=1; rep(i,m-1){ ll f2=(f1+f0)%mod; f0=f1; f1=f2; } vector > res=a; n--; while(n>0){ if(n&1)res=res*a; a=a*a; n>>=1; } cout<<(res[m][0]*f1%mod+res[m][1]*f0%mod)%mod<