Python3 greedy solution + proof of correctness
Intuition\nThe answer must be a power of 2. Imagine that it is not. Suppose for an example that the number $1011_2$ is your your smallest non expressible number
# Intuition\nThe answer must be a power of 2. Imagine that it is not. Suppose for an example that the number $1011_2$ is your your smallest non expressible number. That would mean that the numbers $1000_2$, $0010_2$, and $0001_2$ are all expressible (since they are smaller than the smallest non expressible number). The previous three numbers are all orthogonal or "disjoint" in the sense that they share no $1$ bits. That means that their combination using OR also exists in $nums$, but we know that $1000_2 | 0010_2 | 0001_2 == 1011_2$, which is a contradiction. This logic can be applied to any number that is not a multiple of two, and thus has more than one $1$ bit.\n\nNow you just need to find the smallest power of two that is not expressible. This done by finding the smallest power of two that is not present in the array already.\n\n\n# Approach\n$n & (n-1) == 0$ is a neat bit manipulation trick to identify if a number is a power of two. You can find which power of two it is by bit shifting but I used $log2$ because I am lazy. \n\n# Complexity\n- Time complexity:\nO(n)\n\n- Space complexity:\nO($log2(max(nums))$). This is about 32 in our case. \n\n# Code\n```python3 []\nclass Solution:\n    def minImpossibleOR(self, nums: List[int]) -> int:\n        pres = [0]*32\n        for n in nums:\n            if n & (n-1) == 0:\n                pres[int(math.log2(n))] = 1\n        for i in range(32):\n            if not pres[i]:\n                return int(math.pow(2, i))\n        return -1\n```
['Greedy', 'Bit Manipulation', 'Python3']