#include<bits/stdc++.h>
const int M=1e7;
const int MD=1e9+7;
using namespace std;
typedef long long ll;
ll p[M];
bool ans[M];
int dig(int n)
{
int su=0;
while(n>0)
{
su+=n%10;
n=n/10;
}
return su;
}
void sieve()
{
for(int i=2;i*i<=M;i++)
{
if(ans[i]) continue;
p[i]=dig(i);
for(int j=i+i;j<=M;j+=i)
{
ans[j]=true;
p[j]=(p[j]+p[i])%MD;
}
}
for(int i=1;i<=M;i++)
p[i]=(p[i]+p[i-1])%MD;
}
int main() {
sieve();
int t;
cin>>t;
while(t--)
{
int l,r;
cin>>l>>r;
cout<<(p[r]-p[l-1]+MD)%MD<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KY29uc3QgaW50IE09MWU3Owpjb25zdCBpbnQgTUQ9MWU5Kzc7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwpsbCBwW01dOwpib29sIGFuc1tNXTsKaW50IGRpZyhpbnQgbikKewoJaW50IHN1PTA7Cgl3aGlsZShuPjApCgl7CgkJc3UrPW4lMTA7CgkJbj1uLzEwOwoJfQoJcmV0dXJuIHN1Owp9CnZvaWQgc2lldmUoKQp7Cglmb3IoaW50IGk9MjtpKmk8PU07aSsrKQoJewoJCWlmKGFuc1tpXSkgY29udGludWU7CgkJcFtpXT1kaWcoaSk7CgkJZm9yKGludCBqPWkraTtqPD1NO2orPWkpCgkJewoJCSAgIGFuc1tqXT10cnVlOwoJCSAgIHBbal09KHBbal0rcFtpXSklTUQ7CgkJfQoJfQoJZm9yKGludCBpPTE7aTw9TTtpKyspCglwW2ldPShwW2ldK3BbaS0xXSklTUQ7Cn0KaW50IG1haW4oKSB7CglzaWV2ZSgpOwoJaW50IHQ7CgljaW4+PnQ7Cgl3aGlsZSh0LS0pCgl7CgkJaW50IGwscjsKCQljaW4+Pmw+PnI7CgkJY291dDw8KHBbcl0tcFtsLTFdK01EKSVNRDw8ZW5kbDsKCX0KCXJldHVybiAwOwp9