设区间中最高的二进制位为 $k$,则答案为 $2^{k+1}-1$,即 $k$ 及以下的位都为 $1$。
我们可以用 $2$ 步操作达到最大值:对最大值先操作 $2^k$,会变成 $2^k$,然后操作 $1$,就就会变成 $2^{k+1}-1$。
我们只需要判断 $0$ 步和 $1$ 步的情况。$0$ 步的情况显然是初始时区间的 OR 就是答案。
$1$ 步操作的情况我们去枚举操作哪个数,设去掉这个数之后剩下的数的 OR 是 $x$,那么 $1$ 次操作需要把 $x$ 和答案相差的位都变成 $1$。记 $x$ 和答案的异或的最低位是 $l$,最高位是 $r$,那么操作的数需要满足 $\ge l$ 的最低位至少是 $r$。
注意到前缀 OR 只有 $\log A$ 个,后缀 OR 同理,归并起来,其余数的 OR 也只有 $O(\log A)$ 段不同的值。我们可以维护 $i$ 之后最前面的第 $j$ 位是 $1$ 的数,并且维护按下标排序的结果。这可以通过从后向前递推求得,时间复杂度 $O(n\log A)$。处理后缀 OR 同理。
要判断区间中是否有数合法,我们对于每个 $l$ 预处理每个数下一个位的位置(不存在视作 $-1$),查询就是区间最大值是否大于等于 $r$。用 $O(n)-O(1)$ RMQ 可以做到预处理和查询都是 $O(n\log A)$。
总时间复杂度 $O(n\log A)$。