Fibonacci number f(i) appear in a variety of puzzles in nature and math, including packing problems, family trees or Pythagorean triangles. They obey the rule f(i) = f(i - 1) + f(i - 2), where we set f(0) = 1 = f(-1).

Let V and d be two certain positive integers and be N ≡ 1001 a constant. Consider a set of V nodes, each node i having a Fibonacci label F[i] = (f(i) mod N) assigned for i = 1,..., V ≤ N. If |F(i) - F(j)| < d, then the nodes i and j are connected.

Given V and d, how many connected subsets of nodes will you obtain?

<image>

Figure 1: There are 4 connected subsets for V = 20 and d = 100.

Constraints

* 1 ≤ V ≤ 1000
* 1 ≤ d ≤ 150

Input

Each data set is defined as one line with two integers as follows:

Line 1: Number of nodes V and the distance d.

Input includes several data sets (i.e., several lines). The number of dat sets is less than or equal to 50.

Output

Output line contains one integer - the number of connected subsets - for each input line.

Example

Input

5 5
50 1
13 13


Output

2
50
8
#include<iostream>
#include<sstream>
#include<fstream>
#include<cstdio>
#include<vector>
#include<list>
#include<stack>
#include<queue>
#include<deque>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<string>
using namespace std;
#define ll unsigned long long 

int main(){
	map<int,int> table;
	int graph[1011];
	table[0] = 1;
	table[1] = 2;
	graph[1] = 0;
	for(int x=2;x<=1010;++x){
		table[x] = (table[x-1] + table[x-2])%1001;
		graph[x] = 0;
	}
	int v,d;
	while(scanf("%d %d",&v,&d)==2){
		int tot = 0;
		int fibo[v+2];
		fibo[0] = -1;
		for(int x=1;x<=v+1;++x)fibo[x]=table[x];
		sort(fibo,fibo+v+1);
		for(int x=1;x<=v;++x){
			for(int y=x+1;y<=v;++y){
				if(abs(fibo[x]-fibo[y])<d){
					graph[y] = x;
				}
			}
		}
		for(int x=1;x<=v;++x){
			if(graph[x]==0)tot++;
			graph[x] = 0;
		}	
		cout<<tot<<endl;
	}
	return 0;
}