#include <bits/stdc++.h>
using namespace std;
const int maxn = 1 << 17, Siz = 1 << 22, thr = 999;
const int mul = 1278007, mod = 1e9 + 9;
int pw[maxn];
struct segt {
  struct T {
    int v, fx, sz, hs, rhs;
    T *ls, *rs;
    void pu() {
      sz = 1 + ((ls) ? (ls)->sz : 0) + ((rs) ? (rs)->sz : 0);
      hs = (1LL * (1LL * ((ls) ? (ls)->hs : 0) * mul % mod + v) % mod *
                pw[((rs) ? (rs)->sz : 0)] % mod +
            ((rs) ? (rs)->hs : 0)) %
           mod;
      rhs = (1LL * (1LL * ((rs) ? (rs)->rhs : 0) * mul % mod + v) % mod *
                 pw[((ls) ? (ls)->sz : 0)] % mod +
             ((ls) ? (ls)->rhs : 0)) %
            mod;
    }
  } tr[Siz];
  int tot;
  void init() { tot = 0; }
  T *new_node(int val) {
    T *x = &tr[tot++];
    x->v = x->hs = x->rhs = val;
    x->fx = rand();
    x->sz = 1;
    x->ls = x->rs = 0;
    return x;
  }
  T *clone(T *o) {
    T *x = &tr[tot++];
    x->v = o->v;
    x->hs = o->hs;
    x->rhs = o->rhs;
    x->fx = o->fx;
    x->sz = o->sz;
    x->ls = o->ls;
    x->rs = o->rs;
    return x;
  }
  void split(T *x, int k, T *&a, T *&b) {
    if (!x) {
      a = b = 0;
      return;
    }
    if (((x->ls) ? (x->ls)->sz : 0) + 1 <= k) {
      a = clone(x);
      split(x->rs, k - ((x->ls) ? (x->ls)->sz : 0) - 1, a->rs, b);
      a->pu();
    } else {
      b = clone(x);
      split(x->ls, k, a, b->ls);
      b->pu();
    }
  }
  T *merge(T *a, T *b) {
    if (!a || !b) return a ? a : b;
    T *x;
    if (a->fx < b->fx) {
      x = clone(a);
      x->rs = merge(x->rs, b);
      x->pu();
    } else {
      x = clone(b);
      x->ls = merge(a, x->ls);
      x->pu();
    }
    return x;
  }
  void prt(T *x, bool fst = 1) {
    if (!x) return;
    prt(x->ls, 0);
    printf("%d ", x->v);
    prt(x->rs, 0);
    if (fst) puts("");
  }
  struct ST {
    bool ok;
    T *neg, *pos;
    ST() {
      ok = 1;
      neg = pos = 0;
    }
  } st[maxn << 1];
  ST new_st(int v) {
    ST a;
    a.ok = 1;
    if (v < 0) {
      a.neg = new_node(-v);
      a.pos = 0;
    } else {
      a.neg = 0;
      a.pos = new_node(v);
    }
    return a;
  }
  ST merge(ST a, ST b) {
    ST c;
    if (!a.ok || !b.ok)
      c.ok = 0;
    else {
      if (((a.pos) ? (a.pos)->sz : 0) >= ((b.neg) ? (b.neg)->sz : 0)) {
        T *L, *R;
        split(a.pos, ((a.pos) ? (a.pos)->sz : 0) - ((b.neg) ? (b.neg)->sz : 0),
              L, R);
        if (((R) ? (R)->hs : 0) != ((b.neg) ? (b.neg)->rhs : 0))
          c.ok = 0;
        else {
          c.ok = 1;
          c.neg = a.neg;
          c.pos = merge(L, b.pos);
        }
      } else {
        T *L, *R;
        split(b.neg, ((a.pos) ? (a.pos)->sz : 0), L, R);
        if (((a.pos) ? (a.pos)->hs : 0) != ((L) ? (L)->rhs : 0))
          c.ok = 0;
        else {
          c.ok = 1;
          c.neg = merge(a.neg, R);
          c.pos = b.pos;
        }
      }
    }
    return c;
  }
  void build(int n, int *a) {
    init();
    for (int i = 0; i < (int)(n); ++i) st[i + maxn] = new_st(a[i]);
    for (int i = maxn - 1; i; --i) st[i] = merge(st[i << 1], st[i << 1 | 1]);
  }
  void upd(int x, int v) {
    x += maxn;
    st[x] = new_st(v);
    while (x >>= 1) st[x] = merge(st[x << 1], st[x << 1 | 1]);
  }
  ST qry(int l, int r) {
    ST lf, rg;
    for (l += maxn, r += maxn; l < r; l >>= 1, r >>= 1) {
      if (l & 1) lf = merge(lf, st[l++]);
      if (r & 1) rg = merge(st[--r], rg);
    }
    return merge(lf, rg);
  }
} seg;
int n, k, a[maxn], q;
int main() {
  srand(1278007);
  for (int i = 0; i < (int)(maxn); ++i)
    pw[i] = i ? 1LL * mul * pw[i - 1] % mod : 1;
  scanf("%d %d", &n, &k);
  for (int i = 0; i < (int)(n); ++i) scanf("%d", &a[i]);
  seg.build(n, a);
  scanf("%d", &q);
  while (q--) {
    int tp;
    scanf("%d", &tp);
    if (tp == 1) {
      int x, t;
      scanf("%d %d", &x, &t);
      --x;
      seg.upd(x, t);
      a[x] = t;
    } else {
      int l, r;
      scanf("%d %d", &l, &r);
      --l;
      segt::ST ans = seg.qry(l, r);
      if (ans.ok && !((ans.neg) ? (ans.neg)->sz : 0) &&
          !((ans.pos) ? (ans.pos)->sz : 0))
        puts("Yes");
      else
        puts("No");
    }
    if (seg.tot >= Siz - thr) seg.build(n, a);
  }
  return 0;
}
