#include <bits/stdc++.h>
#define For(i,a,b) for (int i = a ; i <= b ; ++i)
#define Ford(i,a,b) for (int i = a ; i >= b ; --i)
#define ll long long
using namespace std;
ll L,R;
string s;
ll dp[20][200][2];
bool prime[200];
bool isPrime(int x){
if(x < 2) return false;
for(int i = 2 ; i * i <= x ; i++)
if(x % i == 0) return false;
return true;
}
int sumDigit(ll x){
int s = 0;
while(x){
s += x % 10;
x /= 10;
}
return s;
}
ll sub1(){
ll ans = 0;
For(i,L,R){
if(isPrime(sumDigit(i))) ans++;
}
return ans;
}
ll digit(int pos,int sum,bool tight){
if(pos == s.size())
return prime[sum];
if(dp[pos][sum][tight] != -1)
return dp[pos][sum][tight];
int lim = tight ? s[pos] - '0' : 9;
ll res = 0;
For(d,0,lim)
res += digit(pos+1,sum+d,tight && (d==lim));
return dp[pos][sum][tight] = res;
}
ll solve(ll x){
s = to_string(x);
memset(dp,-1,sizeof(dp));
return digit(0,0,1);
}
ll sub2(){
return solve(R) - solve(L-1);
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
freopen("SPECNUM.INP","r",stdin);
freopen("SPECNUM.OUT","w",stdout);
cin >> L >> R;
For(i,0,150) prime[i] = isPrime(i);
if(R <= 1e5) cout << sub1();
else cout << sub2();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRm9yKGksYSxiKSBmb3IgKGludCBpID0gYSA7IGkgPD0gYiA7ICsraSkKI2RlZmluZSBGb3JkKGksYSxiKSBmb3IgKGludCBpID0gYSA7IGkgPj0gYiA7IC0taSkKI2RlZmluZSBsbCBsb25nIGxvbmcKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKbGwgTCxSOwpzdHJpbmcgczsKbGwgZHBbMjBdWzIwMF1bMl07CmJvb2wgcHJpbWVbMjAwXTsKCmJvb2wgaXNQcmltZShpbnQgeCl7CiAgICBpZih4IDwgMikgcmV0dXJuIGZhbHNlOwogICAgZm9yKGludCBpID0gMiA7IGkgKiBpIDw9IHggOyBpKyspCiAgICAgICAgaWYoeCAlIGkgPT0gMCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7Cn0KCmludCBzdW1EaWdpdChsbCB4KXsKICAgIGludCBzID0gMDsKICAgIHdoaWxlKHgpewogICAgICAgIHMgKz0geCAlIDEwOwogICAgICAgIHggLz0gMTA7CiAgICB9CiAgICByZXR1cm4gczsKfQoKbGwgc3ViMSgpewogICAgbGwgYW5zID0gMDsKICAgIEZvcihpLEwsUil7CiAgICAgICAgaWYoaXNQcmltZShzdW1EaWdpdChpKSkpIGFucysrOwogICAgfQogICAgcmV0dXJuIGFuczsKfQoKbGwgZGlnaXQoaW50IHBvcyxpbnQgc3VtLGJvb2wgdGlnaHQpewoKICAgIGlmKHBvcyA9PSBzLnNpemUoKSkKICAgICAgICByZXR1cm4gcHJpbWVbc3VtXTsKCiAgICBpZihkcFtwb3NdW3N1bV1bdGlnaHRdICE9IC0xKQogICAgICAgIHJldHVybiBkcFtwb3NdW3N1bV1bdGlnaHRdOwoKICAgIGludCBsaW0gPSB0aWdodCA/IHNbcG9zXSAtICcwJyA6IDk7CgogICAgbGwgcmVzID0gMDsKCiAgICBGb3IoZCwwLGxpbSkKICAgICAgICByZXMgKz0gZGlnaXQocG9zKzEsc3VtK2QsdGlnaHQgJiYgKGQ9PWxpbSkpOwoKICAgIHJldHVybiBkcFtwb3NdW3N1bV1bdGlnaHRdID0gcmVzOwp9CgpsbCBzb2x2ZShsbCB4KXsKICAgIHMgPSB0b19zdHJpbmcoeCk7CiAgICBtZW1zZXQoZHAsLTEsc2l6ZW9mKGRwKSk7CiAgICByZXR1cm4gZGlnaXQoMCwwLDEpOwp9CgpsbCBzdWIyKCl7CiAgICByZXR1cm4gc29sdmUoUikgLSBzb2x2ZShMLTEpOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoTlVMTCk7Y291dC50aWUoTlVMTCk7CiAgICBmcmVvcGVuKCJTUEVDTlVNLklOUCIsInIiLHN0ZGluKTsKICAgIGZyZW9wZW4oIlNQRUNOVU0uT1VUIiwidyIsc3Rkb3V0KTsKICAgIGNpbiA+PiBMID4+IFI7CiAgICBGb3IoaSwwLDE1MCkgcHJpbWVbaV0gPSBpc1ByaW1lKGkpOwogICAgaWYoUiA8PSAxZTUpIGNvdXQgPDwgc3ViMSgpOwogICAgZWxzZSBjb3V0IDw8IHN1YjIoKTsKICAgIHJldHVybiAwOwp9