import heapq INF=10**18+1 def check(X): b=[] for i in range(K-1,-1,-1): if B[i]>=X: b+=[K-i] if len(b)==0: return N=X M=b[0] dist=[INF for i in range(K+M)] Q=[] for i in range(K): if A[i]>=X: dist[i]=i heapq.heappush(Q,(i,i)) while Q: c,v=heapq.heappop(Q) if dist[v]=K and dist[K+(v+j)%M]>c+j: dist[K+(v+j)%M]=c+j heapq.heappush(Q,(c+j,K+(v+j)%M)) else: if dist[K+(v-K+j)%M]>c+j: dist[K+(v-K+j)%M]=c+j heapq.heappush(Q,(c+j,K+(v-K+j)%M)) if N1: mid=(ok+ng)//2 if check(mid): ok=mid else: ng=mid print(ok)