#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define ll long long
#define el cout<<"\n"
#define sz(x) (int)(x).size()
#define all(x) (x).begin(),(x).end()
#define f0(i,n) for(int i=0;i<n;i++)
#define f1(i,n) for(int i=1;i<=n;i++)
#define fz(i,a,n,z) for(int i=a;i<n;i+=z)
#define rep(i,a,n,z) for(int i=a;i>n;i-=z)
#define faster ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define file(name) freopen(name".inp","r",stdin);freopen(name".out","w",stdout);
const int N = 1e6 + 5;
int REV(int n) { // Đảo số
int res = 0;
while (n != 0) {
res = res * 10 + n % 10;
n /= 10;
}
return res;
}
int longma(int n) { // đếm độ dài của một số
int d = 0;
while (n != 0) {n /= 10; d++;}
return d;
}
int ghep(int a, int b) { // Ghép a với b
return a * pow(10, longma(b)) + b;
}
vector<int> palindrome;
void SinhPalin() { // Sinh số đối xứng
for (int i = 1; i <= 9999; ++i) {
int revI = REV(i);
palindrome.push_back(ghep(i, revI));
for (int j = 1; j <= 9; ++j) { // cho j vào giữa hai số là i và REV(i)
palindrome.push_back(ghep(i * 10 + j, revI));
}
}
sort(all(palindrome));
}
bool checkprime(ll n) // Kiểm tra nguyên tố
{
if (n == 2 || n == 3) return true;
if (n < 2 || n % 2 == 0 || n % 3 == 0) return false;
for (int i = 5; 1ll * i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) return false;
}
return true;
}
vector<int> Prime;
void SinhNguyenTo(int n) { // Sinh số nguyên tố
Prime.push_back(2);
for (int i = 3; i <= sqrt(n); i += 2) {
if (checkprime(i)) Prime.push_back(i);
}
}
int main() {
faster
int a, b;
cin >> a >> b;
SinhNguyenTo(b);
SinhPalin();
int left = lower_bound(all(palindrome), a) - palindrome.begin(); // Tìm số đối xứng đầu tiên lớn hơn hoặc bằng a
int right = upper_bound(all(palindrome), b) - palindrome.begin() - 1; // Tìm số đối xứng đầu tiên nhỏ hơn hoặc bằng b
int n = Prime.size();
ll res = 0;
for (int i = left; i <= right; ++i) {
int j = 0, cntDiv = 0, x = palindrome[i]; // cntDiv: biến đếm ước
while (cntDiv < 3 && j < n) { // khi ước đạt tới giá trị thỏa mãn thì dừng để tiết kiệm thời gian chạy
if (palindrome[i] % Prime[j] == 0) {
while (palindrome[i] % Prime[j] == 0) {palindrome[i] /= Prime[j];}
cntDiv++;
}
++j;
}
if (palindrome[i] > 1) {cntDiv++;} // vì chạy đến sqrt(n) nên chưa chắc số đó đã về 1. Ví dụ: số 91 chỉ chia 7 = 13 là hết vòng lặp nên phải +1 ước nguyên tố
if (cntDiv >= 3) {res += x;} // Thỏa mãn đề bài thì ...
}
cout << res;
}
/*-----------------------END-----------------------*/