1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4 using namespace std;
5 const int maxn=100000+5;
6 int num[maxn<<4];
7 int tmp[maxn];
8 int indice[50];
9 int tot;
10 void push_up(int rt)
11 {
12 num[rt]=min(num[rt<<1],num[rt<<1|1]);
13 }
14 void build(int l,int r,int rt)
15 {
16 if(l==r)
17 {
18 scanf("%d",&num[rt]);
19 tmp[tot++]=num[rt];
20 return ;
21 }
22 int m=(l+r)>>1;
23 build(l,m,rt<<1);
24 build(m+1,r,rt<<1|1);
25 push_up(rt);
26 }
27 void update(int x,int y,int l,int r,int rt)
28 {
29 if(l==r)
30 {
31 num[rt]=y;
32 return ;
33 }
34 int m=(l+r)>>1;
35 if(x<=m) update(x,y,l,m,rt<<1);
36 else update(x,y,m+1,r,rt<<1|1);
37 push_up(rt);
38 }
39 int query(int L,int R,int l,int r,int rt)
40 {
41 if(L<=l&&r<=R)
42 {
43 return num[rt];
44 }
45 int m=(l+r)>>1;
46 if(R<=m) return query(L,R,l,m,rt<<1);
47 if(L>m) return query(L,R,m+1,r,rt<<1|1);
48 int a=query(L,R,l,m,rt<<1);
49 int b=query(L,R,m+1,r,rt<<1|1);
50 return min(a,b);
51 }
52 int main()
53 {
54 int n,q;
55 scanf("%d%d",&n,&q);
56 tot=1;
57 build(1,n,1);
58 while(q--)
59 {
60 getchar();
61 int cnt=0;
62 char cmd;
63 cmd=getchar();
64 if(cmd=='q')
65 {
66 while(cmd!='(')
67 cmd=getchar();
68 while(cmd!=')')
69 scanf("%d%c",&indice[cnt++],&cmd);
70 printf("%d\n",query(indice[0],indice[1],1,n,1));
71 }
72 else
73 {
74 while(cmd!='(')
75 cmd=getchar();
76 while(cmd!=')')
77 scanf("%d%c",&indice[cnt++],&cmd);
78 int temp=tmp[indice[0]];
79 for(int i=0;i<cnt-1;i++)
80 tmp[indice[i]]=tmp[indice[i+1]];
81 tmp[indice[cnt-1]]=temp;
82 for(int i=0;i<cnt;i++)
83 update(indice[i],tmp[indice[i]],1,n,1);
84 }
85 }
86 return 0;
87 }