Problem:
Score : 300 points

Problem Statement

As a token of his gratitude, Takahashi has decided to give his mother an integer sequence.
The sequence A needs to satisfy the conditions below:

A consists of integers between X and Y (inclusive).

For each 1\leq i \leq |A|-1, A_{i+1} is a multiple of A_i and strictly greater than A_i.

Find the maximum possible length of the sequence.

Constraints

1 \leq X \leq Y \leq 10^{18}

All input values are integers.

Input

Input is given from Standard Input in the following format:

X Y

Output

Print the maximum possible length of the sequence.

Sample Input 1

3 20

Sample Output 1

3

The sequence 3,6,18 satisfies the conditions.

Sample Input 2

25 100

Sample Output 2

3

Sample Input 3

314159265 358979323846264338

Sample Output 3

31

Solution in C (GCC 5.4.1) (judge verdict: Accepted)

#include <stdio.h>
#include <string.h>
#define REP(i, n) for(i = 0; i < n; ++i)
#define FOR(i, a, b) for(i = a; i < b; ++i)

void char_to_int(char Xchar[19], int X[19]){
    int i;
    int len = strlen(Xchar);
    REP(i, len){
        X[i] = Xchar[len - 1 - i] - '0';
    }
}

void multiple(int X[19], int k){
    int i;
    REP(i, 19){
        X[i] *= k;
    }
    REP(i, 18){
        X[i + 1] += (X[i] / 10);
        X[i] %= 10;
    }
}

int comp(int X[19], int Y[19]){
    int i;
    REP(i, 19){
        if(X[18 - i] < Y[18 - i]){
            return 1;
        }else if(X[18 - i] > Y[18 - i]){
            return -1;
        }
    }
    return 0;
}

int main(){
    char Xchar[19], Ychar[19];
    int X[19] = {}, Y[19] = {};
    int ans = 0;
    int i;

    scanf("%s %s", Xchar, Ychar);

    char_to_int(Xchar, X);
    char_to_int(Ychar, Y);

    int ret = 0;
    while(ret == 1 || ret == 0){
        ans++;
        multiple(X, 2);
        ret = comp(X, Y);
    }

    printf("%d\n", ans);
    return 0;
}