New special data-structure
You can use a Sparse-Table for these type of queries.

Most implementations/tutorials on Sparse-Tables don't actually cover/support the usecase of adding new values (actually I've never seen one before), however it shouldn't be too hard to modify a typical implementation. You basically only need to invert what each entry stores.

Normally a sparse table stores the following things for each element at position $i$. It stores the minimum of the range $[i, i+1)$, the minimum of the interval $[i, i+2)$, the minimum of of the range $[i, i+4)$, the minimum of the interval $[i, i+8)$, and so forth.

This is a problem when you want to append a new value, because it will affect at least one range for each element, so adding a new element is $O(n)$.

However if you point the ranges in the opposite direction, you do better. So for each element at position $i$, you store the minimum of the ranges $(i-1, i]$, $(i-2, i]$, $(i-4, i]$, and so forth. You can still do the answer minimum queries in $O(1)$, but now if you add a new element at the end, you only need to recompute $O(\log n)$ ranges, namely the new ones for the new element. You don't need to modify the other entries.

One thing that you additionally should take into care. Whenever your array gets gets bigger than a power of 2, you need to compute a new range for each element (in $O(n)$ time). But that's still amortized $O(\log n)$.



edit: Actually, now that I think about it more, this $O(n)$ recomputation can be avoided. Notice, that a those new ranges $(i-2^{\log n + 1}, i]$ will contain exactly the same values as the previous ranges $(i-2^{\log n}, i]$. Therefore you can always just lookup the largest range $(i-2^j, i]$ if you want to want to know the range $(i-2^k, i]$ with $k \ge j$. Then adding a new element works in true $O(\log n)$ time, and not just in amortized time.