#include <bits/stdc++.h>
using namespace std;
template <class o>
inline void qr(o &x) {
  x = 0;
  char c = getchar();
  int f = 1;
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + (c ^ 48);
    c = getchar();
  }
  x *= f;
}
template <class o>
void qw(o x) {
  if (x / 10) qw(x / 10);
  putchar(x % 10 + 48);
}
template <class o>
void pr1(o x) {
  if (x < 0) putchar('-'), x = -x;
  qw(x);
  putchar(' ');
}
template <class o>
void pr2(o x) {
  if (x < 0) putchar('-'), x = -x;
  qw(x);
  puts("");
}
const int N = 1e5 + 5;
namespace Hash {
const int mod = 1e9 + 7, B = 107097, iB = 286964156;
int _w[N << 1], *w = _w + N;
void init() {
  w[0] = 1;
  for (int i = 1; i < N; ++i) {
    w[i] = 1ll * w[i - 1] * B % mod;
    w[-i] = 1ll * w[-i + 1] * iB % mod;
  }
}
struct str {
  int x, m;
  str() {
    x = 0;
    m = 0;
  }
  str(int v) {
    x = v;
    m = 1;
  }
  str(int x, int m) : x(x), m(m) {}
  friend bool operator==(const str &a, const str &b) {
    return a.m == b.m ? a.x == b.x : 0;
  }
  friend str operator+(const str &a, const str &b) {
    return str((a.x + 1ll * b.x * w[a.m]) % mod, a.m + b.m);
  }
  friend str operator-(const str &a, const str &b) {
    return str(1ll * (a.x - b.x + mod) * w[-b.m] % mod, a.m - b.m);
  }
};
}  // namespace Hash
using Hash::str;
struct Seg {
  bool v;
  str vl, vr;
  Seg() {}
  Seg(int x) {
    v = 0;
    if (x > 0)
      vr = str(x);
    else
      vl = str(-x);
  }
} t[N << 2];
str gvl(int p, int k) {
  if (!k) return str();
  if (k == t[p].vl.m) return t[p].vl;
  if (k <= t[p << 1].vl.m) return gvl(p << 1, k);
  return t[p << 1].vl +
         (gvl(p << 1 | 1, k - t[p << 1].vl.m + t[p << 1].vr.m) - t[p << 1].vr);
}
str gvr(int p, int k) {
  if (!k) return str();
  if (k == t[p].vr.m) return t[p].vr;
  if (k <= t[p << 1 | 1].vr.m) return gvr(p << 1 | 1, k);
  return t[p << 1 | 1].vr +
         (gvr(p << 1, k - t[p << 1 | 1].vr.m + t[p << 1 | 1].vl.m) -
          t[p << 1 | 1].vl);
}
void upd(int p) {
  if (t[p << 1].v || t[p << 1 | 1].v) {
    t[p].v = 1;
    return;
  }
  t[p].v = 0;
  t[p].vl = t[p << 1].vl, t[p].vr = t[p << 1 | 1].vr;
  if (t[p << 1].vr.m >= t[p << 1 | 1].vl.m) {
    if (gvr(p << 1, t[p << 1 | 1].vl.m) == t[p << 1 | 1].vl)
      t[p].vr = t[p].vr + (t[p << 1].vr - t[p << 1 | 1].vl);
    else
      t[p].v = 1;
  } else {
    if (gvl(p << 1 | 1, t[p << 1].vr.m) == t[p << 1].vr)
      t[p].vl = t[p].vl + (t[p << 1 | 1].vl - t[p << 1].vr);
    else
      t[p].v = 1;
  }
}
void build(int p, int l, int r) {
  if (l == r) {
    int x;
    qr(x);
    t[p] = Seg(x);
    return;
  }
  int mid = l + r >> 1;
  build(p << 1, l, mid), build(p << 1 | 1, mid + 1, r);
  upd(p);
}
void modify(int p, int l, int r, int pos, int x) {
  if (l == r) {
    t[p] = Seg(x);
    return;
  }
  int mid = l + r >> 1;
  pos <= mid ? modify(p << 1, l, mid, pos, x)
             : modify(p << 1 | 1, mid + 1, r, pos, x);
  upd(p);
}
int sta[50], top;
void push(int p, int l, int r, int L, int R) {
  if (L <= l && R >= r) {
    sta[++top] = p;
    return;
  }
  int mid = l + r >> 1;
  if (L <= mid) push(p << 1, l, mid, L, R);
  if (R > mid) push(p << 1 | 1, mid + 1, r, L, R);
}
str seg[50];
int n;
str gv(int i, int k) {
  if (!k) return str();
  if (k == seg[i].m) return seg[i];
  if (k <= t[sta[i]].vr.m) return gvr(sta[i], k);
  return t[sta[i]].vr +
         (gv(i - 1, k - t[sta[i]].vr.m + t[sta[i]].vl.m) - t[sta[i]].vl);
}
bool check(int l, int r) {
  top = 0;
  push(1, 1, n, l, r);
  for (int i = 1; i <= top; ++i) {
    if (t[sta[i]].v) return 0;
    if (seg[i - 1].m < t[sta[i]].vl.m) return 0;
    if (gv(i - 1, t[sta[i]].vl.m) == t[sta[i]].vl) {
      seg[i] = t[sta[i]].vr + (seg[i - 1] - t[sta[i]].vl);
    } else
      return 0;
  }
  return !seg[top].m;
}
void solve() {
  Hash::init();
  int o;
  qr(n), qr(o);
  build(1, 1, n);
  int m;
  qr(m);
  for (int i = 1; i <= m; ++i) {
    int op, l, r;
    qr(op), qr(l), qr(r);
    if (op == 1)
      modify(1, 1, n, l, r);
    else {
      if (check(l, r))
        puts("Yes");
      else
        puts("No");
    }
  }
}
int main() {
  solve();
  return 0;
}
