#include <bits/stdc++.h>
using namespace std;
int top, vis[200005], L[200005], R[200005], a[200005], n, m, q, sta[200005],
    len1[200005], len2[200005], be[200005], num1[200005], len[200005], k, occ;
unsigned long long hs[200005], h1[200005], h2[200005], h3[505][505];
void build(int id) {
  top = 0;
  vis[id] = 1;
  for (int i = L[id]; i <= R[id]; i++) {
    if (a[i] > 0)
      sta[++top] = a[i];
    else {
      if (top && sta[top] > 0 && sta[top] + a[i] != 0)
        vis[id] = 0;
      else if (top && sta[top] > 0 && sta[top] + a[i] == 0)
        top--;
      else
        sta[++top] = a[i];
    }
  }
  if (vis[id]) {
    h1[id] = h2[id] = len1[id] = len2[id] = 0;
    for (int i = 1; i <= top; i++) {
      if (sta[i] < 0)
        h1[id] = h1[id] * 19260817 + sta[i], len1[id]++,
        h3[id][len1[id]] = h1[id];
      else
        h2[id] = h2[id] + sta[i] * hs[len2[id]], len2[id]++;
    }
  }
}
void solve(int l, int r) {
  if (be[l] == be[r]) {
    top = 0;
    for (int i = l; i <= r; i++) {
      if (a[i] > 0)
        sta[++top] = a[i];
      else {
        if (top && sta[top] > 0 && sta[top] + a[i] == 0)
          top--;
        else {
          printf("No\n");
          return;
        }
      }
    }
    if (top)
      printf("No\n");
    else
      printf("Yes\n");
    return;
  }
  unsigned long long h = 0, sit = 0;
  top = 0;
  for (int i = l; i <= R[be[l]]; i++) {
    if (a[i] > 0) {
      top++;
      h = h + hs[sit] * a[i];
      num1[top] = sit;
      sit++;
      len[top] = 1;
    } else {
      if (!top) {
        printf("No\n");
        return;
      }
      int id = num1[top] + len[top] - 1;
      h += a[i] * hs[id];
      len[top]--;
      if (!len[top]) top--;
    }
  }
  for (int i = be[l] + 1; i < be[r]; i++) {
    if (!vis[i]) {
      printf("No\n");
      return;
    }
    int L = 1;
    while (top && L <= len1[i]) {
      if (len[top] <= len1[i] - L + 1) {
        int R = L + len[top] - 1;
        unsigned long long H = h3[i][R] - h3[i][L - 1] * hs[R - L + 1];
        h += H * hs[num1[top]];
        L += len[top];
        top--;
      } else {
        int R = len1[i];
        unsigned long long H = h3[i][R] - h3[i][L - 1] * hs[R - L + 1];
        h += H * hs[num1[top] + len[top] - (R - L + 1)];
        len[top] -= (R - L + 1);
        L = len1[i] + 1;
      }
    }
    if (L <= len1[i] && !top) {
      printf("No\n");
      return;
    }
    if (len2[i]) {
      top++;
      h += h2[i] * hs[sit];
      num1[top] = sit;
      sit += len2[i];
      len[top] = len2[i];
    }
  }
  for (int i = L[be[r]]; i <= r; i++) {
    if (a[i] > 0) {
      top++;
      h = h + a[i] * hs[sit];
      num1[top] = sit;
      sit++;
      len[top] = 1;
    } else {
      if (!top) {
        printf("No\n");
        return;
      }
      int id = num1[top] + len[top] - 1;
      h += a[i] * hs[num1[top] + len[top] - 1];
      len[top]--;
      if (!len[top]) top--;
    }
  }
  if (!h)
    printf("Yes\n");
  else
    printf("No\n");
}
int main() {
  scanf("%d%d", &n, &m);
  hs[0] = 1;
  for (int i = 1; i <= n; i++) hs[i] = hs[i - 1] * 19260817;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  k = sqrt(n);
  for (int i = 1; i <= n; i += k) {
    occ++;
    L[occ] = i;
    R[occ] = min(n, i + k - 1);
    for (int t = L[occ]; t <= R[occ]; t++) {
      be[t] = occ;
    }
    build(occ);
  }
  scanf("%d", &q);
  for (int i = 1; i <= q; i++) {
    int k, l, r;
    scanf("%d%d%d", &k, &l, &r);
    if (k == 1) {
      a[l] = r;
      build(be[l]);
    } else {
      solve(l, r);
    }
  }
}
