#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5, M = 400, M2 = N / M + 5, mo2 = 1e9 + 9;
struct P {
  int y;
} mi[M + 5];
const P base = (P){19260817};
inline P operator+(const P& a, const P& b) { return (P){(a.y + b.y) % mo2}; }
inline P operator-(const P& a, const P& b) {
  return (P){(a.y + mo2 - b.y) % mo2};
}
inline P operator*(const P& a, const P& b) {
  return (P){int(1ll * a.y * b.y % mo2)};
}
inline bool operator==(const P& a, const P& b) { return a.y == b.y; }
int n, k, q, i, a[N], o, x, y, bl;
int bel[N];
struct BLK {
  int be, en, st[M + 5], w;
  P h1[M + 5], h2[M + 5];
  inline void rebuild(int o = 0) {
    int i;
    w = 0;
    for (i = be; i <= en; ++i)
      w&& a[i] < 0 && st[w] == -a[i] ? --w : st[++w] = a[i];
    if (!(o & 1))
      for (i = 1; i <= w; ++i)
        h2[i] = h2[i - 1] * base + (P){st[i] < 0 ? -st[i] : N};
    if (!(o & 2)) h1[w + 1] = (P){0};
    for (i = w; i; --i)
      h1[i] = h1[i + 1] * base + (P){st[i] > 0 ? st[i] : 2 * N};
  }
  inline P geth(int o, int l, int r) {
    return o == 1 ? h1[l] - h1[r + 1] * mi[r - l + 1]
                  : h2[r] - h2[l - 1] * mi[r - l + 1];
  }
} b[M2];
struct atom {
  int i, l, r;
} st[M2];
int w;
inline void push(int i) {
  int l = 1, r = b[i].w, z;
  for (; w && l <= r &&
         (z = st[w].r - st[w].l + 1,
         z <= r - l + 1 && b[st[w].i].geth(1, st[w].l, st[w].r) ==
                               b[i].geth(2, l, l + z - 1));
       --w, l += z)
    ;
  if (l > r) return;
  if (!w) {
    st[++w] = (atom){i, l, r};
    return;
  }
  int le = 0, ri = min(st[w].r - st[w].l + 1, r - l + 1), lm = min(M, ri), md;
  for (; le < lm && b[i].st[l + le] < 0 &&
         b[st[w].i].st[st[w].r - le] == -b[i].st[l + le];
       ++le)
    ;
  st[w].r -= le;
  l += le;
  st[++w] = (atom){i, l, r};
}
inline bool solve(int l, int r) {
  if (bel[l] == bel[r]) {
    b[bl + 1].be = l;
    b[bl + 1].en = r;
    b[bl + 1].rebuild(3);
    return !b[bl + 1].w;
  } else {
    w = 0;
    b[bl + 1].be = l;
    b[bl + 1].en = b[bel[l]].en;
    b[bl + 1].rebuild(1);
    b[bl + 2].be = b[bel[r]].be;
    b[bl + 2].en = r;
    b[bl + 2].rebuild(2);
    if (b[bl + 1].w) st[++w] = (atom){bl + 1, 1, b[bl + 1].w};
    for (i = bel[l] + 1; i < bel[r]; ++i) push(i);
    push(bl + 2);
    return !w;
  }
}
int main() {
  for (i = 1, mi[0] = (P){1}; i < M; ++i) mi[i] = mi[i - 1] * base;
  scanf("%d%d", &n, &k);
  for (i = 1; i <= n; ++i) scanf("%d", a + i);
  for (i = 1; i <= n; ++i) bel[i] = (i - 1) / M + 1, b[bel[i]].en = i;
  for (i = n; i; --i) b[bel[i]].be = i;
  bl = bel[n];
  for (i = 1; i <= bl; ++i) b[i].rebuild();
  for (scanf("%d", &q); q--;) {
    scanf("%d%d%d", &o, &x, &y);
    if (o == 1)
      a[x] = y, b[bel[x]].rebuild();
    else
      puts(solve(x, y) ? "Yes" : "No");
  }
}
