#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int sum = 0, f = 1;
  char ch = getchar();
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') ch = getchar(), f = -1;
  while (ch <= '9' && ch >= '0') sum = sum * 10 + ch - '0', ch = getchar();
  return sum * f;
}
const int mod = 998244353;
inline int jia(int a, int b) { return (a + b) % mod; }
inline int jian(int a, int b) { return (a - b + mod) % mod; }
inline int cheng(int a, int b) { return 1ll * a * b % mod; }
int n, k;
const int B = 350;
int w[100010], pos[100010];
int st[100010], num;
bool Can[100010];
int zuo[300][B + 10], zuo_num[300];
int you[300][B + 10], you_num[300];
void build(int id) {
  zuo_num[id] = you_num[id] = 0;
  num = 0;
  int st_ = (id - 1) * B + 1;
  int en_ = id * B;
  for (int i = st_; i <= min(en_, n); i++) {
    if (st[num] > 0 && st[num] + w[i] == 0)
      num--;
    else {
      if (st[num] > 0 && w[i] < 0)
        return void(Can[id] = 0);
      else
        st[++num] = w[i];
    }
  }
  int pl = 0;
  for (int i = 1; i <= num; i++) {
    if (st[i] > 0) {
      zuo_num[id] = pl = num - i + 1;
      int t = num;
      zuo[id][num - i + 2] = 0;
      for (; t >= i; t--)
        zuo[id][pl] = jia(cheng(zuo[id][pl + 1], k + 1), st[t]), pl--;
      break;
    }
    ++pl;
    you[id][pl] = jia(cheng(you[id][pl - 1], k + 1), -st[i]);
    you_num[id] = pl;
  }
  Can[id] = 1;
}
struct opt {
  int id, l, r, ty;
  opt(int id_ = 0, int l_ = 0, int r_ = 0, int ty_ = 0)
      : id(id_), l(l_), r(r_), ty(ty_) {}
} ST[100010];
int tot;
int poww[100010];
void pre() {
  poww[0] = 1;
  for (int i = 1; i <= 100000; i++) poww[i] = cheng(poww[i - 1], k + 1);
}
inline int suan_l(int id, int l, int r) {
  return jian(zuo[id][l], cheng(zuo[id][r + 1], poww[r - l + 1]));
}
inline int suan_r(int id, int l, int r) {
  return jian(you[id][r], cheng(you[id][l - 1], poww[r - l + 1]));
}
bool add(opt s) {
  if (!s.ty) {
    ST[++tot] = s;
    return 1;
  }
  int len;
  while (tot && !ST[tot].ty &&
         ((len = ST[tot].r - ST[tot].l + 1) < s.r - s.l + 1)) {
    int tt = suan_l(ST[tot].id, ST[tot].l, ST[tot].r);
    int rr = suan_r(s.id, s.l, s.l + len - 1);
    if (tt != rr) return 0;
    tot--;
    s.l += len;
  }
  if (!tot || ST[tot].ty) {
    ST[++tot] = s;
    return 1;
  }
  int tt = suan_l(ST[tot].id, ST[tot].r - (s.r - s.l + 1) + 1, ST[tot].r);
  int rr = suan_r(s.id, s.l, s.r);
  if (tt != rr) return 0;
  ST[tot].r -= s.r - s.l + 1;
  if (ST[tot].r < ST[tot].l) tot--;
  return 1;
}
bool query(int l, int r) {
  for (int i = pos[l] + 1; i <= pos[r] - 1; i++)
    if (!Can[i]) return 0;
  if (pos[l] + 1 >= pos[r]) {
    num = 0;
    for (int i = l; i <= r; i++) {
      if (w[i] < 0) {
        if (st[num] + w[i] != 0) return 0;
        num--;
      } else
        st[++num] = w[i];
    }
    return !num;
  }
  num = 0;
  for (int i = l; i <= pos[l] * B; i++) {
    if (w[i] < 0) {
      if (st[num] + w[i] != 0) return 0;
      num--;
    } else
      st[++num] = w[i];
  }
  int L = 0, R = 0;
  for (int i = num; i >= 1; i--) L = jia(cheng(L, k + 1), st[i]);
  int NumL = num;
  num = 0;
  for (int i = (pos[r] - 1) * B + 1; i <= r; i++) {
    if (w[i] > 0)
      st[++num] = w[i];
    else {
      if (st[num] + w[i] == 0)
        num--;
      else if (st[num] > 0)
        return 0;
      else
        st[++num] = w[i];
    }
  }
  if (st[num] > 0) return 0;
  for (int i = 1; i <= num; i++) R = jia(cheng(R, k + 1), -st[i]);
  tot = 0;
  bool A = 0;
  for (int i = pos[l] + 1; i <= pos[r] - 1; i++) {
    if (you_num[i]) {
      A = add(opt(i, 1, you_num[i], 1));
      if (!A) return 0;
    }
    if (zuo_num[i]) {
      A = add(opt(i, 1, zuo_num[i], 0));
      if (!A) return 0;
    }
  }
  if (!tot) return L == R;
  if (!ST[1].ty) {
    int L_ = 0;
    for (int i = tot; i >= 1; i--)
      L_ = jia(cheng(L_, poww[ST[i].r - ST[i].l + 1]),
               suan_l(ST[i].id, ST[i].l, ST[i].r));
    L = jia(cheng(L_, poww[NumL]), L);
    return L == R;
  }
  if (ST[tot].ty) {
    int R_ = 0;
    for (int i = 1; i <= tot; i++)
      R_ = jia(cheng(R_, poww[ST[i].r - ST[i].l + 1]),
               suan_r(ST[i].id, ST[i].l, ST[i].r));
    R = jia(cheng(R_, poww[num]), R);
    return L == R;
  }
  int ll = 0, rr = 0;
  int qq = 0, kk = 0;
  for (int i = 1; i <= tot; i++)
    if (ST[i].ty)
      rr = jia(cheng(rr, poww[ST[i].r - ST[i].l + 1]),
               suan_r(ST[i].id, ST[i].l, ST[i].r)),
      qq += ST[i].r - ST[i].l + 1;
    else
      break;
  for (int i = tot; i >= 1; i--)
    if (!ST[i].ty)
      ll = jia(cheng(ll, poww[ST[i].r - ST[i].l + 1]),
               suan_l(ST[i].id, ST[i].l, ST[i].r)),
      kk += ST[i].r - ST[i].l + 1;
    else
      break;
  if (kk > num) return 0;
  if (kk == num) {
    if (qq == NumL && ll == R && rr == L) return 1;
    return 0;
  }
  int asfd = 0;
  for (int i = 1; i <= kk; i++) asfd = jia(cheng(asfd, k + 1), -st[i]);
  if (asfd != ll) return 0;
  asfd = 0;
  for (int i = kk + 1; i <= num; i++) asfd = jia(cheng(asfd, k + 1), -st[i]);
  asfd = jia(cheng(rr, poww[num - kk]), asfd);
  return L == asfd;
}
int main() {
  n = read(), k = read();
  pre();
  for (int i = 1; i <= n; i++) w[i] = read(), pos[i] = (i - 1) / B + 1;
  for (int i = 1; i <= pos[n]; i++) build(i);
  int q = read();
  int cnt = 0;
  for (int i = 1; i <= q; i++) {
    int ty = read(), l = read(), r = read();
    if (ty == 1)
      w[l] = r, build(pos[l]);
    else if (query(l, r))
      cout << "Yes\n";
    else
      cout << "No\n";
  }
  return 0;
}
