#include <bits/stdc++.h>
using namespace std;
const int inf = 1 << 30;
class LazySeg {
int sz;
vector<int> data;
vector<int> lazy;
public:
LazySeg(int _sz) {
sz = 1;
while (sz < _sz) sz *= 2;
data = vector<int>(sz * 2);
lazy = vector<int>(sz * 2);
}
// BUILD
void build(vector<int> &ar, int cur, int l, int r) {
if (l + 1 == r) {
data[cur] = ar[l];
} else {
int mid = (l + r) / 2;
int cl = cur * 2, cr = cur * 2 + 1;
build(ar, cl, l, mid);
build(ar, cr, mid, r);
data[cur] = min(data[cl], data[cr]);
}
}
void build(vector<int> &ar) {
build(ar, 1, 0, sz);
}
void down(int cur) {
int cl = cur * 2, cr = cur * 2 + 1;
int diff = lazy[cur];
data[cl] += diff;
data[cr] += diff;
lazy[cl] += lazy[cur];
lazy[cr] += lazy[cur];
lazy[cur] = 0;
}
// QUERY
int query(int left, int right, int cur, int l, int r) {
if (left <= l && r <= right) {
return data[cur];
} else if (left >= r || l >= right) {
return inf;
} else {
down(cur);
int mid = (l + r) / 2;
int cl = cur * 2, cr = cur * 2 + 1;
int ql = query(left, right, cl, l, mid);
int qr = query(left, right, cr, mid, r);
return min(ql, qr);
}
}
int query(int left, int right) {
return query(left, right, 1, 0, sz);
}
// ADD
void add(int left, int right, int val, int cur, int l, int r) {
if (left <= l && r <= right) {
lazy[cur] += val;
data[cur] += val;
} else if (left >= r || l >= right) {
} else {
down(cur);
int mid = (l + r) / 2;
int cl = cur * 2, cr = cur * 2 + 1;
add(left, right, val, cl, l, mid);
add(left, right, val, cr, mid, r);
data[cur] = min(data[cl], data[cr]);
}
}
// UPDATE
void update(int idx, int val, int cur, int l, int r) {
if (idx < l || idx >= r) {
return;
}
if (l + 1 == r) {
data[cur] = val;
} else {
down(cur);
int mid = (l + r) / 2;
int cl = cur * 2, cr = cur * 2 + 1;
update(idx, val, cl, l, mid);
update(idx, val, cr, mid, r);
data[cur] = min(data[cl], data[cr]);
}
}
void add(int left, int right, int val) {
add(left, right, val, 1, 0, sz);
}
void update(int idx, int val) {
update(idx, val, 1, 0, sz);
}
};
vector <int> vec;
int N, M;
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int i, n, x, y, op;
scanf ("%d %d", &N, &M);
for (n = 1; n < N; n *= 2);
for (i = 1; i <= N; i++) {
scanf ("%d", &x);
vec.push_back(-x);
}
LazySeg seg(n);
seg.build(vec);
for (i = 1; i <= M; i++) {
scanf ("%d %d %d", &op, &x, &y);
if (op == 0) {
--x; --y;
printf ("%d\n", -seg.query(x, y + 1));
} else {
--x;
seg.update(x, -y);
}
}
return 0;
}