#include <bits/stdc++.h>
using namespace std;
const unsigned long long bas = 2333;
struct node {
  int x, l, r;
} st[100102], s2[100102];
unsigned long long ha[320][320], hb[320][320], bin[100102];
int n, k, blk, a[100102], bel[100102], lx[100102], rx[100102], cn, m,
    pos[320][320];
int s[100102], tot, md[100102], len[100102], tt, t2;
bool ok[100102];
inline unsigned long long getha(int x, int l, int r) {
  return ha[x][r] - ha[x][l - 1] * bin[r - l + 1];
}
inline unsigned long long gethb(int x, int l, int r) {
  return hb[x][l] - hb[x][r + 1] * bin[r - l + 1];
}
inline void love(int x) {
  tot = 0;
  for (int i = lx[x]; i <= rx[x]; i++) {
    if (a[i] > 0)
      s[++tot] = a[i], pos[x][tot] = i;
    else {
      if (tot && s[tot] > 0 && s[tot] + a[i] != 0) {
        ok[x] = 0;
        return;
      }
      if (tot && s[tot] > 0)
        tot--;
      else
        s[++tot] = a[i], pos[x][tot] = i;
    }
  }
  len[x] = tot;
  md[x] = 0;
  ok[x] = 1;
  for (int i = 1; i <= tot; i++)
    if (s[i] < 0) md[x] = i;
  for (int i = 1; i <= tot; i++) ha[x][i] = ha[x][i - 1] * bas + abs(s[i]);
  hb[x][tot + 1] = 0;
  for (int i = tot; i; i--) hb[x][i] = hb[x][i + 1] * bas + abs(s[i]);
}
inline bool ask(int l, int r) {
  if ((r - l) % 2 == 0) return false;
  if (bel[r] - bel[l] <= 1) {
    tot = 0;
    for (int i = l; i <= r; i++) {
      if (a[i] > 0)
        s[++tot] = a[i];
      else {
        if (!tot) return false;
        if (s[tot] + a[i] != 0) return false;
        tot--;
      }
    }
    if (tot)
      return false;
    else
      return true;
  }
  tot = tt = t2 = 0;
  for (int i = l; i <= rx[bel[l]]; i++) {
    if (a[i] > 0)
      s[++tot] = a[i];
    else {
      if (!tot) return false;
      if (s[tot] + a[i] != 0) return false;
      tot--;
    }
  }
  for (int i = bel[l] + 1; i < bel[r]; i++) {
    if (!ok[i]) return false;
    int tl = 1;
    while (tt && tl <= md[i]) {
      int le = min(md[i] - tl + 1, st[tt].r - st[tt].l + 1);
      if (gethb(st[tt].x, st[tt].r - le + 1, st[tt].r) !=
          getha(i, tl, tl + le - 1))
        return false;
      st[tt].r -= le;
      if (st[tt].l > st[tt].r) tt--;
      tl += le;
    }
    if (tl <= md[i]) s2[++t2] = (node){i, tl, md[i]};
    if (md[i] < len[i]) st[++tt] = (node){i, md[i] + 1, len[i]};
  }
  int ts2 = 0;
  for (int i = 1; i <= t2; i++) ts2 += s2[i].r - s2[i].l + 1;
  if (ts2 > tot) return false;
  int ltt = 1;
  while (ltt <= t2 && tot) {
    while (s2[ltt].l <= s2[ltt].r && tot) {
      if (a[pos[s2[ltt].x][s2[ltt].l]] + s[tot] != 0) return false;
      tot--;
      s2[ltt].l++;
    }
    if (s2[ltt].l > s2[ltt].r) ltt++;
  }
  ts2 = tot;
  for (int i = 1; i <= tt; i++) ts2 += st[i].r - st[i].l + 1;
  if (ts2 > blk) return false;
  for (int i = 1; i <= tt; i++) {
    for (int j = st[i].l; j <= st[i].r; j++) s[++tot] = a[pos[st[i].x][j]];
  }
  for (int i = lx[bel[r]]; i <= r; i++) {
    if (a[i] > 0)
      s[++tot] = a[i];
    else {
      if (!tot) return false;
      if (s[tot] + a[i] != 0) return false;
      tot--;
    }
  }
  if (tot) return false;
  return true;
}
int main() {
  scanf("%d%d", &n, &k);
  blk = sqrt(n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  bin[0] = 1;
  for (int i = 1; i <= n; i++) bin[i] = bin[i - 1] * bas;
  for (int i = 1; i <= n; i++) {
    int j = i;
    while (j <= n && i / blk == j / blk) j++;
    j--;
    lx[++cn] = i, rx[cn] = j;
    for (int ii = i; ii <= j; ii++) bel[ii] = cn;
    i = j;
  }
  for (int i = 1; i <= cn; i++) love(i);
  scanf("%d", &m);
  while (m--) {
    int op;
    scanf("%d", &op);
    if (op == 1) {
      int x, y;
      scanf("%d%d", &x, &y);
      a[x] = y;
      love(bel[x]);
    } else {
      int l, r;
      scanf("%d%d", &l, &r);
      if (ask(l, r))
        puts("Yes");
      else
        puts("No");
    }
  }
}
