#include <stdio.h>
#include <string.h>
#include <vector>

using namespace std;

#define MAX(a, b)	((a) > (b) ? (a) : (b))
#define MIN(a, b)	((a) < (b) ? (a) : (b))
#define ABS(a)		((a) < (0) ? (-(a)) : (a))

void setIO(const char * in = NULL, const char * out = NULL);

vector<int> V;

bool prim(int a){
	
	for(int i = 2; i * i <= a; ++i){
		if(a % i == 0)
			return false;
	}
	
	return true;
}

int mod4(int a){
	return (a & 3);
}

vector<int> R[15];

int main(){
	
	//setIO("file", "file.out");
	
	
	int A, B;	scanf("%d %d", &A, &B);
	
	
	int vals[] = {2, 3, 5 ,7};
	
	for(int i = 0; i < 4; ++i){
		R[1].push_back(vals[i]);
		V.push_back(vals[i]);
	}
	
	int zc[20];
	zc[0] = 1;
	for(int i = 1; i < 10; ++i){
		zc[i] = zc[i - 1] * 10;
	}
	
	for(int i = 2; i < 8; ++i){
		
		for(int j = 0; j < 4; ++j){
			
			int x = vals[j];
			
			int n = R[i - 1].size();
			for(int k = 0; k < n; ++k){
				int to = R[i - 1][k];
				
				int v = x * zc[i - 1] + to;
				
				if(prim(v)){
					V.push_back(v);
				}
					
				R[i].push_back(v);
			}
			
		}
		
	}
	
	
	int n = V.size();
	
	int p1 = n - 1;
	for(int i = 0; i < n; ++i){
		if(V[i] >= A){
			p1 = i;
			break;
		}
	}
	
	int p2 = n - 1;
	for(int i = 0; i < n; ++i){
		if(V[i] >= B){
			p2 = i;
			break;
		}
	}
	
	int ans = p2 - p1;
	
	if(B == V[p2]) ans++;
	
	printf("%d", ans);
	
return 0;	
}

void setIO(const char * in, const char * out){
	if(in != NULL)	freopen(in, "r", stdin);
	if(out != NULL)	freopen(out, "w", stdout);
}