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 <vector>
#include <iostream>
#include <valarray>
#include <string>
#include <algorithm>
#include <set>
typedef unsigned long long ull;
typedef long long ll;

#define rep(i,n) for(ull i = 0;i<(n);i++)
#define rep1(i,n) for(ull i = 1;i<=(n);i++)
#define revrep(i,n) for(ull i = (n-1);i>=0;i--)
#define all(n) (n).begin(),(n).end()
#define show(x) cout << "debug " << #x << ":" << x << endl;
#define showvec(x) cout << endl << "debug " << #x << ":" << endl; \
	for(ull __i = 0;__i < x.size();__i++){ \
		for(ull __j = 0;__j<x[0].size();__j++){ \
			cout << x[__i][__j] << " "; \
		} \
		cout << endl; \
	} \
	cout << endl;
using namespace std;

int UF_data[1011];
void UF_init(){
	rep(i,1011) UF_data[i] = i;
}
int UF_root(int a){
	if(UF_data[a] == a) return a;
	return (UF_data[a] = UF_root(UF_data[a]));
}
bool UF_is_same_set(int a, int b){
	return UF_root(a) == UF_root(b);
}
void UF_unite(int a, int b){
	UF_data[UF_root(a)] = UF_root(b);
}

int main(){
	int F[1002];
	F[0] = 1, F[1] = 2;
	for(int i = 2;i<1002;i++){
		F[i] = (F[i-1] + F[i-2]) % 1001;
	}
	int V,D;
	while(cin >> V >> D){
		UF_init();
		rep1(i,V){
			rep1(j,V){
				if(abs(F[i] - F[j]) < D){
					UF_unite(i,j);
				} 
			}
		}
		int ans = 0;
		rep1(i,V){
			if(UF_root(i) == i) ans++;
		}
		cout << ans << endl;
	}
}