#include <bits/stdc++.h>
using namespace std;
const long long base1 = 12391, base2 = 15111;
long long powd1[100005], powd2[100005];
void pre(int n) {
  powd1[0] = powd2[0] = 1;
  for (int i = 1; i <= n; i++) {
    powd1[i] = powd1[i - 1] * base1 % 1004535809;
    powd2[i] = powd2[i - 1] * base2 % 1061109567;
  }
}
int S;
int num[100005], n;
long long suml1[405][405], suml2[405][405];
long long sumr1[405][405], sumr2[405][405];
int val1[405][405], val2[405][405];
int len1[405], len2[405];
bool can[405];
void rebuild(int bl) {
  int l = (bl - 1) * S + 1, r = min(bl * S, n);
  int top1 = 0, top2 = 0, *p = val1[bl], *q = val2[bl];
  for (int i = l; i <= r; i++)
    if (num[i] > 0)
      q[++top2] = num[i];
    else if (!top2)
      p[++top1] = -num[i];
    else if (q[top2] != -num[i]) {
      can[bl] = 0;
      return;
    } else
      top2--;
  can[bl] = 1;
  len1[bl] = top1;
  len2[bl] = top2;
  suml1[bl][0] = suml2[bl][0] = 0;
  for (int i = 1; i <= top1; i++) {
    suml1[bl][i] = (suml1[bl][i - 1] * base1 + p[i]) % 1004535809;
    suml2[bl][i] = (suml2[bl][i - 1] * base2 + p[i]) % 1061109567;
  }
  sumr1[bl][top2 + 1] = sumr2[bl][top2 + 1] = 0;
  for (int i = top2; i > 0; i--) {
    sumr1[bl][i] = (sumr1[bl][i + 1] * base1 + q[i]) % 1004535809;
    sumr2[bl][i] = (sumr2[bl][i + 1] * base2 + q[i]) % 1061109567;
  }
}
inline bool equal(int bl1, int bl2, int x, int y, int len) {
  if ((suml1[bl1][x] - suml1[bl1][x - len] * powd1[len] % 1004535809 +
       1004535809) %
          1004535809 !=
      (sumr1[bl2][y] - sumr1[bl2][y + len] * powd1[len] % 1004535809 +
       1004535809) %
          1004535809)
    return 0;
  if ((suml2[bl1][x] - suml2[bl1][x - len] * powd2[len] % 1061109567 +
       1061109567) %
          1061109567 !=
      (sumr2[bl2][y] - sumr2[bl2][y + len] * powd2[len] % 1061109567 +
       1061109567) %
          1061109567)
    return 0;
  return 1;
}
pair<int, int> st[100005];
bool query(int l, int r) {
  if (!((r - l) & 1)) return 0;
  int lb = (l - 1) / S + 1, rb = (r - 1) / S + 1;
  if (lb == rb) {
    int top = 0;
    for (int i = l; i <= r; i++)
      if (num[i] > 0)
        st[++top] = pair<int, int>(0, i);
      else if (!top || num[st[top].second] != -num[i])
        return 0;
      else
        top--;
    return top == 0;
  } else {
    int nl = l, nr = min(lb * S, n);
    int top = 0;
    for (int i = nl; i <= nr; i++)
      if (num[i] > 0)
        st[++top] = pair<int, int>(0, i);
      else {
        if (!top || num[st[top].second] != -num[i]) return 0;
        top--;
      }
    for (int i = lb + 1; i < rb; i++) {
      if (!can[i]) return 0;
      int cur = 1;
      while (cur <= len1[i]) {
        if (!top) return 0;
        if (!st[top].first) {
          if (num[st[top].second] != val1[i][cur]) return 0;
          top--;
          cur++;
        } else {
          int t = min(st[top].second, len1[i] - cur + 1);
          if (!equal(i, st[top].first, cur + t - 1, st[top].second - t + 1, t))
            return 0;
          st[top].second -= t;
          if (!st[top].second) top--;
          cur += t;
        }
      }
      if (len2[i]) st[++top] = pair<int, int>(i, len2[i]);
    }
    nl = (rb - 1) * S + 1;
    nr = r;
    for (int i = nl; i <= nr; i++)
      if (num[i] > 0)
        st[++top] = pair<int, int>(0, i);
      else {
        if (!top) return 0;
        if (!st[top].first) {
          if (num[st[top].second] != -num[i]) return 0;
          top--;
        } else {
          if (val2[st[top].first][st[top].second] != -num[i]) return 0;
          st[top].second--;
          if (!st[top].second) top--;
        }
      }
    return top == 0;
  }
}
int main() {
  int k;
  scanf("%d%d", &n, &k);
  pre(n);
  S = (int)(sqrt(n) + 0.5);
  for (int i = 1; i <= n; i++) scanf("%d", &num[i]);
  for (int i = 1; i * S <= n; i++) rebuild(i);
  int m;
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) {
    int kind, x, y;
    scanf("%d%d%d", &kind, &x, &y);
    if (kind == 1) {
      num[x] = y;
      rebuild((x - 1) / S + 1);
    } else {
      bool v = query(x, y);
      puts((v) ? "Yes" : "No");
    }
  }
  return 0;
}
