To query min(l, r), compute . Then the answer is min(st[l][k], st[r - 2^k + 1][k]). This works because is the largest power of that fits in the range. The two ranges and overlap, but that is fine for min queries: min(a, b, c) = min(min(a, b), min(b, c)) even if b appears twice.
The overlapping ranges trick is specific to idempotent operations like min and max. It does not work for sum or count. Time: per query because you only compute , then look up two precomputed values and take their minimum. No loops needed.