#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5, M = 1005, bas = 1e6 + 7;
const long long mo = 23333333333333333;
int n, k, q, op, l, r;
int a[N], be[N], B;
long long _[N];
bool yes;
long long mul(long long x, long long y) {
  long long z = x * y - (long long)((long double)x * y / mo) * mo;
  return (z + mo) % mo;
}
struct block {
  int l, r;
  int d[M], ds;
  int d2[M], ds2;
  long long h[M], h2[M];
  bool wr;
  void build() {
    wr = ds = ds2 = 0;
    for (int i = l, _e = r; i <= _e; ++i)
      if (a[i] > 0) {
        d[++ds] = a[i];
      } else {
        if (!ds)
          d2[++ds2] = -a[i];
        else {
          if (d[ds] == -a[i])
            --ds;
          else {
            wr = 1;
            break;
          }
        }
      }
    h[ds + 1] = 0;
    for (int i = ds, _e = 1; i >= _e; --i)
      h[i] = (mul(h[i + 1], bas) + d[i]) % mo;
    for (int i = 1, _e = ds2; i <= _e; ++i)
      h2[i] = (mul(h2[i - 1], bas) + d2[i]) % mo;
  }
} b[M];
int ss;
struct nod {
  int a, r, one;
} st[M * 6];
long long getr(long long *h, int r, int len) {
  return (h[r - len + 1] - mul(h[r + 1], _[len]) + mo) % mo;
}
long long getl(long long *h, int l, int len) {
  return (h[l + len - 1] - mul(h[l - 1], _[len]) + mo) % mo;
}
int push(int l, int r = 0) {
  if (!yes) return 0;
  if (r == 0) {
    if (b[l].wr) return yes = 0;
    int p = 1;
    for (; p <= b[l].ds2;) {
      if (!ss) return yes = 0;
      if (st[ss].one) {
        if (b[l].d2[p] != st[ss].a) return yes = 0;
        ++p;
        --ss;
      } else {
        int len = min(b[l].ds2 - p + 1, st[ss].r);
        if (getr(b[st[ss].a].h, st[ss].r, len) != getl(b[l].h2, p, len))
          return yes = 0;
        p += len;
        if (!(st[ss].r -= len)) --ss;
      }
    }
    if (b[l].ds) st[++ss] = (nod){l, b[l].ds, 0};
  } else {
    for (int i = l, _e = r; i <= _e; ++i)
      if (a[i] > 0) {
        st[++ss] = (nod){a[i], 0, 1};
      } else {
        if (!ss) return yes = 0;
        if (st[ss].one) {
          if (st[ss].a != -a[i]) return yes = 0;
          --ss;
        } else {
          if (b[st[ss].a].d[st[ss].r] != -a[i]) return yes = 0;
          if (!--st[ss].r) --ss;
        }
      }
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> k;
  for (int i = 1, _e = n; i <= _e; ++i) cin >> a[i];
  _[0] = 1;
  for (int i = 1, _e = n; i <= _e; ++i) _[i] = mul(_[i - 1], bas);
  B = 500;
  for (int i = 1, _e = n; i <= _e; ++i)
    be[i] = i / B + 1, b[be[i]].r = i, (b[be[i]].l ? 0 : b[be[i]].l = i);
  for (int i = 1, _e = be[n]; i <= _e; ++i) b[i].build();
  cin >> q;
  for (int ts = 1, _e = q; ts <= _e; ++ts) {
    cin >> op >> l >> r;
    if (op == 1) {
      a[l] = r;
      b[be[l]].build();
    } else {
      yes = 1;
      ss = 0;
      if (be[l] == be[r])
        push(l, r);
      else {
        push(l, b[be[l]].r);
        for (int i = be[l] + 1, _e = be[r] - 1; i <= _e; ++i) push(i);
        push(b[be[r]].l, r);
      }
      if (ss) yes = 0;
      printf(yes ? "Yes\n" : "No\n");
    }
  }
}
