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 <cstring>
#include <algorithm>
#define N_F 1010
#define N_CONST 1001
using namespace std;


int v,d,  f1,f2;
unsigned long long int f[N_F];
int node[N_CONST+10][N_CONST+10];

void rmNode( int i ){
  //  cout << "  remove : "<<i<<endl;

  node[i][i] = 0;
  for( int j=0;j<N_CONST;j++ ){
    if( node[j][j]==0 )
      continue;
    if( node[i][j]==1 ){
      rmNode( j );
    }
  }
}

int main(){
  f[0]=1;  f[1]=2;
  for( int i=2;i<N_F;i++ ){
    //  f[i] = f[i-1] + f[i-2];
      f[i] = (f[i-1] + f[i-2])% N_CONST;
      //        cout << i << "\t"<< f[i] << endl;
  }



  while( cin>>v >> d ){
    //    cout << v <<","<< d<< endl;

    memset( node,0,sizeof(node) );

    //    cout << "test1" << endl;
    for( int i=1;i<=v;i++ ){
      f1 = f[i] % N_CONST; // node ÂÃ label
      node[ f1 ][ f1 ]=1;  // nodeÂÂªÂÂ¶ÂÃÂÂ·ÂÃ©ÂÂ±ÂÃÂÃ°Â\ÂÂ·

      //cout << "test3 i="<<i<<" f1="<<f1 << endl;
      for( int j=1;j<=v;j++ ){
	f2 = f[j] % N_CONST;
	//	if( abs( f[i]-f[j] ) < d ){
	//	cout << "test4 j="<<j<<" f[j]="<<f[j]<<" f2="<<f2 << endl;
	if( abs( f1-f2 ) < d ){
	  node[ f1 ][ f2 ] = 1;
	  node[ f2 ][ f1 ] = 1;
	}
      }
    }
    //    cout << "test2" << endl;
    int n=0;
    for( int i=0;i<N_CONST;i++ ){
      if( node[i][i]==0 ) // ÂmÂ[ÂhÂÂªÂÂ¶ÂÃÂÂµÂÃÂÂ¢
	continue;
      n++;
      rmNode( i );     // i ÂÃÂÃÂÂ±ÂÂ³ÂÃªÂÂ½ÂmÂ[ÂhÂÃ°ÂSÂÃÂÃ­ÂÂ
    }
    cout << n << endl;

    //    break;
  }

  return 0;
}