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 <bits/stdc++.h>
void swap(int *a, int *b) {
  int tmp;
  tmp = *a;
  *a = *b;
  *b = tmp;
}
void makeHeap(int *dat, int size, int oya) {
  int i;
  int oidx;
  int oval;
  int ko;
  oidx = oya;
  oval = dat[oidx];
  ko = oidx + oidx + 1;
  while (ko < size) {
    if ((ko + 1 < size) && (dat[ko] < dat[ko + 1])) ko++;
    if (oval >= dat[ko]) break;
    dat[oidx] = dat[ko];
    oidx = ko;
    ko = oidx + oidx + 1;
  }
  dat[oidx] = oval;
}
int hsort(int *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) {
  long long fib, fib1, fib2;
  int node[(150)];
  short cnt;
  short v, d;
  short i, j;
  short scnt;
  while (scanf("%d%d", &v, &d) == 2) {
    scnt = 1;
    fib1 = 1;
    fib2 = 2;
    node[0] = fib2;
    for (i = 2; i <= v; i++) {
      fib = (fib2 + fib1) % (1001);
      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;
}
