#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll mod=1e9+7,n;
struct matrix
{
ll x[5][5];
int h,c;
} a;
int m;
matrix mul(matrix A, matrix B)
{
matrix C;
C.h=A.h;
C.c=B.c;
for(int i=1;i<=C.h;i++){
for(int j=1;j<=B.c;j++){
C.x[i][j]=0;
for(int k=1;k<=A.c;k++){
C.x[i][j]=(C.x[i][j] + A.x[i][k] * B.x[k][j]%mod)%mod;
}
}
}
return C;
}
matrix pow(matrix A, ll N)
{
if(N==1) return A;
matrix temp=pow(A,N/2);
temp=mul(temp,temp);
if(N%2==1) temp=mul(temp,A);
return temp;
}
ll get(ll n) {
if(n==1)
{
return 1;
}
matrix a;
a.h=1;
a.c=2;
a.x[1][1]=1;
a.x[1][2]=1;
matrix b;
b.h=2;
b.c=2;
b.x[1][1]=0;
b.x[1][2]=1;
b.x[2][1]=1;
b.x[2][2]=1;
b=pow(b,n-1);
a=mul(a,b);
return a.x[1][1];
}
int main()
{
// for(int i=1;i<=1000000;i++){
// dp[i] = dp[i-1] + get(i);
// }
while(cin>>n>>m) {
cout<<get(m+2)-get(n+1)<<'\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmxsIG1vZD0xZTkrNyxuOwpzdHJ1Y3QgbWF0cml4CnsKICAgIGxsIHhbNV1bNV07CiAgICBpbnQgaCxjOwp9IGE7CmludCBtOwptYXRyaXggbXVsKG1hdHJpeCBBLCBtYXRyaXggQikKewogICAgbWF0cml4IEM7CiAgICBDLmg9QS5oOwogICAgQy5jPUIuYzsKICAgIGZvcihpbnQgaT0xO2k8PUMuaDtpKyspewogICAgICAgIGZvcihpbnQgaj0xO2o8PUIuYztqKyspewogICAgICAgICAgICBDLnhbaV1bal09MDsKICAgICAgICAgICAgZm9yKGludCBrPTE7azw9QS5jO2srKyl7CiAgICAgICAgICAgICAgICBDLnhbaV1bal09KEMueFtpXVtqXSAgKyBBLnhbaV1ba10gKiBCLnhba11bal0lbW9kKSVtb2Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gQzsKfQptYXRyaXggcG93KG1hdHJpeCBBLCBsbCBOKQp7CiAgICBpZihOPT0xKSByZXR1cm4gQTsKICAgIG1hdHJpeCB0ZW1wPXBvdyhBLE4vMik7CiAgICB0ZW1wPW11bCh0ZW1wLHRlbXApOwogICAgaWYoTiUyPT0xKSB0ZW1wPW11bCh0ZW1wLEEpOwogICAgcmV0dXJuIHRlbXA7Cn0KbGwgZ2V0KGxsIG4pIHsKICAgIGlmKG49PTEpCiAgICB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBtYXRyaXggYTsKICAgIGEuaD0xOwogICAgYS5jPTI7CiAgICBhLnhbMV1bMV09MTsKICAgIGEueFsxXVsyXT0xOwoKICAgIG1hdHJpeCBiOwogICAgYi5oPTI7CiAgICBiLmM9MjsKICAgIGIueFsxXVsxXT0wOwogICAgYi54WzFdWzJdPTE7CiAgICBiLnhbMl1bMV09MTsKICAgIGIueFsyXVsyXT0xOwoKICAgIGI9cG93KGIsbi0xKTsKICAgIGE9bXVsKGEsYik7CgogICAgcmV0dXJuIGEueFsxXVsxXTsKfQppbnQgbWFpbigpCnsKICAgIC8vIGZvcihpbnQgaT0xO2k8PTEwMDAwMDA7aSsrKXsKICAgIC8vICAgICBkcFtpXSA9IGRwW2ktMV0gKyBnZXQoaSk7CiAgICAvLyB9CiAgICB3aGlsZShjaW4+Pm4+Pm0pIHsKICAgICAgICBjb3V0PDxnZXQobSsyKS1nZXQobisxKTw8J1xuJzsKICAgIH0KICAgIHJldHVybiAwOwp9