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 <stdio.h>
#include <iostream>

using namespace std;

#define SIZE (1001)
#define N (1001)

void swap(short *a, short *b)
{
	short tmp;
	tmp = *a;
	*a = *b;
	*b = tmp;
}

void makeHeap(short *dat, int size, int oya)
{
	int i;		/// ½§ä
	int oidx;	/// eÌY¦Û¶
	int oval;	/// eÌlÛ¶
	int ko;		/// qÌY¦

	oidx = oya; // eÌY¦ðÛ¶
	oval = dat[oidx]; // eÌlðÛ¶
	ko = oidx + oidx + 1; // ¶ÌqÌY¦ðÛ¶
	while(ko < size) // ±ÌY¦ªf[^¢ÌêJèÔ·
	{
		if((ko+1 < size) && (dat[ko] < dat[ko+1])) ko++; // EÌqªå«¢
		if(oval >= dat[ko]) break; // eªå«¢, »±ÅI¹
		
		dat[oidx] = dat[ko]; // eÉêÔå«¢qÌlðãü
		oidx = ko; // »ÌqÌY¦ðeÆ·é
		ko = oidx + oidx + 1; // eÆµ½qÌqðßé
	}
	dat[oidx] = oval; // Û¶µÄ¢½eÌlðãü
}

int hsort(short *dat, int size)
{
	int oya;
	int sz = size;

	for(oya=(int)((size-2)/2); oya >= 0; oya--) {
		makeHeap(dat, sz, oya);
	}
	while(sz > 0) {
		sz--;
		swap(&dat[0], &dat[sz]);
		makeHeap(dat, sz, 0);
	}

	return 0;
}

int main(void)
{
	int fib, fib1, fib2;
	char input1[8], input2[8], input3[8];
	short node[SIZE];
	short cnt;
	short v, d; /// üÍ v, d
	short i, j; /// ½§ä{i, j}
	short scnt; /// TCYÌJEg


	while(cin >> v >> d) {
//		fgets(input1, 8, stdin);
//		if(input1[0] == '\n' || input1[0] == '\0') break;
//		sscanf(input1, "%s %s", input2, input3);
//		v = atoi(input2);
//		d = atoi(input3);

		scnt = 1;
		fib1 = 1; fib2 = 2;
		node[0] = fib2;
		for(i=2; i <= v; i++) {
			fib = (fib2 + fib1) % N;
			node[scnt++] = fib;
			fib1 = fib2; fib2 = fib;
		}

		hsort(node, scnt);
		cnt = 1; i = 0;
		for(j=i+1; j < scnt; j++) {
			if(0 > (node[j]-node[i]) || (node[j]-node[i]) >= d){
				cnt++;
			}
			i = j;
		}
		
		printf("%d\n", cnt);
	}

	return 0;
}