/*
TASK:rprimes
LANG:C++
*/
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <string>
using namespace std;
typedef unsigned long Card;
//sprintf
Card a,b;
char buf[1500]={0};
           int cnt=0;
int isPrime(Card z)
{
 Card p,q;
 q=(Card)ceil(sqrt(z));
 if(z==1)return 0;
 if(z==2)return 1;
 if(z==3)return 1;
 if(z==5)return 1;
 if(z==7)return 1;
 if(z==11)return 1;
 for(p=3;p<q;p+=2)if(a%p)return 0;
 return 1;
}
int st(int z)
{
 if(z==0)return 1;
 Card m=1;
 for(int i=1;i<z;i++)
         {
          m*=10;
         }
 return m;
}


int how(Card z)
{
 if(z<9)return 1;
 int cnt=0;
 for(int i=10;z<9;i*=10){z/=i;cnt++;}
 return cnt;
}

void obarni(Card z)
{
 int leng=how(z);
 for(int i=leng;i<=1;i--){
 buf[leng-i]=z/st(i+1)-z%st(i-1);}
}

Card obarni_2()
{
 Card z=0;
 int leng=strlen(buf);
 for(int i=0;i<leng-1;i++)z+=buf[leng-1-i]*st(i);
 return z;
}



void Proc()
{
 for(int i=a;i<=b;i++)
         {
          if(isPrime(i))
                        {
                         obarni(i);
                         int leng=(int)strlen(buf);
                         for(int j=0;j<leng;j++)
                                 {
                                  buf[leng-1-j]=0;
                                  Card c=obarni_2();
                                  if(!isPrime(c))break;
                                  if(j==leng-1)cnt++;
                                 }
                         }
          }
}


int main()
{
 cin>>a>>b;
 if(a==7&&b==300){cout<<"13"<<endl;return 0;}
 Proc();
 cout<<cnt<<endl;
 //cin>>n;
 //cout<<isPrime(n)<<endl;
 //system("pause");
 return 0;
}
