import math def create_ST(arr,st,low,high,pos): #print(low,high,pos) if(low == high): st[pos] = arr[low] return st mid = int((low + high)/2) create_ST(arr,st,low,mid,2*pos + 1) create_ST(arr,st,mid+1,high,2*pos + 2) st[pos] = min(st[2*pos + 1],st[2*pos + 2]) return st def next_power_of_2(x): f = 1 if x == 0 else 2**(x - 1).bit_length() return f*2 - 1 def query(st,ql,qh,low,high,pos): if(ql<=low and qh>=high): return st[pos] if(ql > high or qh < low): return math.inf mid = (low + high)/2 return min(query(st,ql,qh,low,mid,2*pos + 1), query(st,ql,qh,mid+1,high,2*pos + 2)) arr = list(map(int,input().split())) st = [None] * int(next_power_of_2(len(arr))) sth = create_ST(arr,st,0,len(arr)-1,0) print("segment tree is " + str(sth)) n,m = input().split() print("query from range %s to %s is" %(n,m)) print(query(sth,int(n),int(m),0,len(arr)-1,0))