MEX of LCM
Contest: Codeforces Round 879 (Div. 2)
Difficulty rating: 2300
Tags: binary search, data structures, implementation, math, number theory

You are given an array $$$a$$$ of length $$$n$$$. A positive integer $$$x$$$ is called good if it is impossible to find a subsegment$$$^{\dagger}$$$ of the array such that the least common multiple of all its elements is equal to $$$x$$$.

You need to find the smallest good integer.

A subsegment$$$^{\dagger}$$$ of the array $$$a$$$ is a set of elements $$$a_l, a_{l + 1}, \ldots, a_r$$$ for some $$$1 \le l \le r \le n$$$. We will denote such subsegment as $$$[l, r]$$$.

Input format:
Each test consists of multiple test cases. The first line of each test case contains a single integer $$$t$$$ ($$$1 \le t \le 5 \cdot 10^4$$$) — the number of test cases. The description of test cases follows.

The first line of each test case contains a single integer $$$n$$$ ($$$1 \leq n \leq 3 \cdot 10^5$$$) — the length of the array $$$a$$$.

The second line of each test case contains $$$n$$$ integers $$$a_1, a_2, \ldots , a_n$$$ ($$$1 \leq a_i \leq 10^9$$$) — the elements of the array $$$a$$$.

It is guaranteed that the sum of $$$n$$$ over all test cases does not exceed $$$3 \cdot 10^5$$$.

Output format:
For each test case, output a single integer — the smallest good integer.

Constraints:
Time limit: 2.0 s
Memory limit: 512.0 MB

Note:
In the first test case, $$$4$$$ is a good integer, and it is the smallest one, since the integers $$$1,2,3$$$ appear in the array, which means that there are subsegments of the array of length $$$1$$$ with least common multiples of $$$1,2,3$$$. However, it is impossible to find a subsegment of the array with a least common multiple equal to $$$4$$$.

In the second test case, $$$7$$$ is a good integer. The integers $$$1,2,3,4,5$$$ appear explicitly in the array, and the integer $$$6$$$ is the least common multiple of the subsegments $$$[2, 3]$$$ and $$$[1, 3]$$$.

In the third test case, $$$1$$$ is a good integer, since the least common multiples for the integer in the subsegments $$$[1, 1], [1, 2], [2, 2]$$$ are $$$2,6,3$$$, respectively.

Example input:
6
3
1 2 3
5
1 2 3 4 5
2
2 3
1
1000000000
12
1 8 4 2 3 5 7 2 9 10 11 13
12
7 2 5 4 2 1 1 2 3 11 8 9

Example output:
4
7
1
1
16
13

Editorial:
Notice that the MEX of $$$n^2$$$ numbers will not exceed $$$n^2+1$$$. Let's calculate all possible LCM values on segments that do not exceed $$$n^2$$$. To do this, we will iterate over the right endpoint of the segments and maintain a set of different LCM values on segments with such a right endpoint.
Let these values be $$$x_1 < x_2 < \ldots < x_k$$$. Then $$$k \leq 1 + 2\log_2n$$$, indeed, for each $$$1 \leq i < k$$$, it is true that $$$x_{i+1}$$$ is divisible by $$$x_i$$$, and therefore $$$x_{i+1} \geq 2x_i$$$, that is, $$$n^2 \geq x^2 \geq 2^{k-1}$$$, from which the required follows. That is, the values $$$x_1, \ldots, x_k$$$ can be stored naively in some dynamic array. Now suppose we want to move the right endpoint, then the array $$$(x_1, \ldots, x_k)$$$ should be replaced by $$$([x_1, a_r], \ldots, [x_k, a_k], a_k)$$$ and remove values greater than $$$n^2+1$$$ from the new array, as well as get rid of duplicates.
All these actions can be performed in $$$O(n \log n)$$$ time, after which we just need to find the MEX among the known set of values. This solution can also serve as proof that the desired MEX does not exceed $$$n \cdot (1 + 2 \log_2 n)$$$, which is less than $$$10^9$$$ under the constraints of the problem. Thus, initially, we can only maintain numbers less than $$$10^9$$$ and not worry about overflows of a 64-bit integer type.