import java.util.HashMap;

public class Euler14 {
    static HashMap<Long, Integer> memo = new HashMap<>();

    static int collatzLength(long n) {
        if (memo.containsKey(n))
            return memo.get(n);
        java.util.ArrayDeque<Long> stack = new java.util.ArrayDeque<>();
        long cur = n;
        while (!memo.containsKey(cur)) {
            stack.push(cur);
            if (cur % 2 == 0)
                cur /= 2;
            else
                cur = 3 * cur + 1;
        }
        int len = memo.get(cur);
        while (!stack.isEmpty()) {
            len++;
            memo.put(stack.pop(), len);
        }
        return memo.get(n);
    }

    static long solve(long limit) {
        memo.clear();
        memo.put(1L, 1);
        long bestN = 1;
        int bestLen = 1;
        for (long i = 2; i < limit; i++) {
            int len = collatzLength(i);
            if (len > bestLen) {
                bestLen = len;
                bestN = i;
            }
        }
        return bestN;
    }

    public static void main(String[] args) {
        assert solve(20) == 18 : "Checkpoint failed";
        System.out.println(solve(1000000));
    }
}
