在傳統的 RMQ (Range Minimum Query) 問題中,我們有靜態的陣列 A,對於每次查詢 (L,R) (L≤R),我們回傳 A[L],A[L+1],⋯,A[R] 之間的最小值。注意陣列的足標從 1 開始,例如陣列最左邊的元素就是 A[1]。
在這個問題中,陣列 A 不再是靜態的,我們需要支援另一個操作如下:
shift(i1,i2,i3,⋯,ik)(i1<i2<⋯<ik,k>1)
代表對 A[i1],A[i2],⋯,A[ik] 做「左環形位移」(left circular shift)。
例如,如果 A={6,2,4,8,5,1,4},則 shift(2,4,5,7) 會產生 6,8,4,5,4,1,2,若繼續做 shift(1,2) 則會變成 8,6,4,5,4,1,2。
Input
只有一筆測試資料,一開始有兩個整數 n,q (1≤n≤100,000、1≤q≤250,000),分別代表陣列 A 的整數數量、和操作的數量。下一行有 n 個不超過 100,000 的整數,代表一開始 A 當中的整數。接著 q 行,每行有一長度不超過 30 的字串,並且沒有空白字元。所有的操作指令保證都是合法的。
注意 :測資很大,最好使用快速的 I/O 方法。
Output
對於每個查詢,印出範圍內的最小值。
Sample Input
7 5
6 2 4 8 5 1 4
query(3,7)
shift(2,4,5,7)
query(1,4)
shift(1,2)
query(2,2)
Sample Output
1
4
6