#include <bits/stdc++.h>
using namespace std;
#define int long long
const int Maxsz = 1e6 + 5, N = 1e6 + 5;
inline int read() {
int r = 0, f = 1;
char c = getchar();
while(c != '-' && (c < '0' || c > '9')) c = getchar();
if(c == '-') {
f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
r *= 10; r += c - '0';
c = getchar();
}
return r * f;
}
inline void write(int x) {
if(x < 0) {
putchar('-');
x = -x;
}
if(x > 9) write(x / 10);
putchar('0' + x % 10);
}
template<class Tp>
bool _Cmp(Tp a, Tp b) {
return a > b;
}
template<class Tp, bool (*Cmp)(Tp a, Tp b) = _Cmp, const int N = Maxsz>
class St {
private:
Tp s[N][(int)log2(N) + 5];
int z = 0;
Tp Max(Tp a, Tp b) {
if(Cmp(a, b)) return a;
else return b;
}
public:
void build(Tp *b, Tp *e) {
z = 0;
for(Tp *i = b; i <= e; i++) s[(++z)][0] = *i;
int t = log2(z);
for(int j = 1; j <= t; j++)
for(int i = 1; i <= z - (int)pow(2, j) + 1; i++)
s[i][j] = Max(s[i][j - 1], s[i + (int)pow(2, j - 1)][j - 1]);
}
Tp get(int l, int r) {
int k = log2(r - l + 1);
return Max(s[l][k], s[r - (int)pow(2, k) + 1][k]);
}
};
int n, m, a[N], l[N], r[N], s[N], k[N];
St<int> t;
signed main() {
n = read(); m = read();
for(int i = 1; i <= n; i++) {
a[i] = read();
l[i] = l[i - 1] + !a[i];
s[i] = s[i - 1] + (a[i] && !a[i - 1]);
}
for(int i = n; i >= 1; i--) r[i] = r[i + 1] + (bool)a[i];
for(int i = 1; i <= n; i++) k[i] = l[i] + r[i];
t.build(k + 1, k + n + 1);
while(m--) {
int q, x, y;
q = read(); x = read(); y = read();
if(q == 1) {
write(t.get(x, y) - l[x - 1] - r[y + 1]);
putchar('\n');
} else {
write((s[x] != s[y]) + 1);
putchar('\n');
}
}
return 0;
}