public int rangeBitwiseAnd(int m, int n) {
        if (m < 0 || n < 0 || m > n) return -1;

        int i = 0;
        while (m != n) {
            m >>= 1;
            n >>= 1;
            ++i;
        }
        return m << i;
    }