#include <bits/stdc++.h>
using namespace std;
template <class IT>
inline void cmax(IT &a, IT b) {
  if (a < b) a = b;
}
template <class IT>
inline void cmin(IT &a, IT b) {
  if (b < a) a = b;
}
template <class IT>
inline bool bmax(IT &a, IT b) {
  if (a < b) {
    a = b;
    return true;
  } else
    return false;
}
template <class IT>
inline bool bmin(IT &a, IT b) {
  if (a > b) {
    a = b;
    return true;
  } else
    return false;
}
const long long p = 1000000007ll, pp = p * p, base = 988244353ll;
const int N = 100005, K = 320;
const double C = 1.0;
int A[N], I[N];
long long E[K] = {1ll};
pair<int, pair<int, int> > S[K * 3];
int tp;
bool bad0;
struct blk {
  long long LH[K], RH[K];
  int L[K], R[K];
  int l, r, lt, rt;
  bool bad;
  inline void bug() {
    int i;
    cerr << "    " << ("l") << " = " << l;
    cerr << "    " << ("r") << " = " << r;
    cerr << "    " << ("bad") << " = " << bad;
    cerr << "\n";
    for (i = (l); i <= (r); ++i) cerr << "    " << ("A[i]") << " = " << A[i];
    cerr << "\n";
    if (!bad) {
      cerr << "    "
           << "L";
      for (i = (1); i <= (lt); ++i) cerr << "    " << L[i];
      cerr << "\n";
      cerr << "    "
           << "R";
      for (i = (1); i <= (rt); ++i) cerr << "    " << R[i];
      cerr << "\n";
    }
  }
  inline void rb() {
    int i, a;
    bad = false;
    lt = rt = 0;
    for (i = (l); i <= (r); ++i) {
      a = A[i];
      if (a > 0)
        R[++rt] = a;
      else {
        a = -a;
        if (rt) {
          if (R[rt] == a)
            --rt;
          else {
            bad = true;
            return;
          }
        } else
          L[++lt] = a;
      }
    }
    LH[lt + 1] = 0ll;
    for (i = (lt); i >= (1); --i) LH[i] = (LH[i + 1] * base + L[i]) % p;
    for (i = (1); i <= (rt); ++i) RH[i] = (RH[i - 1] * base + R[i]) % p;
  }
  inline long long lh(int l, int r) {
    return (LH[l] - LH[r + 1] * E[r - l + 1] + pp) % p;
  }
  inline long long rh(int l, int r) {
    return (RH[r] - RH[l - 1] * E[r - l + 1] + pp) % p;
  }
} B[K];
inline void adb(int id) {
  if (bad0) return;
  if (B[id].bad) {
    bad0 = true;
    return;
  }
  int i = 1, lt = B[id].lt, a;
  while (tp && S[tp].second.second - S[tp].second.first <= lt - i) {
    if (S[tp].first) {
      if (B[S[tp].first].rh(S[tp].second.first, S[tp].second.second) ==
          B[id].lh(i, i + S[tp].second.second - S[tp].second.first)) {
        i += S[tp].second.second - S[tp].second.first + 1;
        --tp;
      } else {
        bad0 = true;
        return;
      }
    } else {
      if (S[tp].second.second == B[id].L[i]) {
        ++i;
        --tp;
      } else {
        bad0 = true;
        return;
      }
    }
  }
  if (tp) {
    if (S[tp].first) {
      if (B[S[tp].first].rh(S[tp].second.second + (i - lt),
                            S[tp].second.second) == B[id].lh(i, lt))
        S[tp].second.second += i - lt - 1;
      else {
        bad0 = true;
        return;
      }
    }
  } else if (i != lt + 1) {
    bad0 = true;
    return;
  }
  if (B[id].rt) S[++tp] = make_pair(id, make_pair(1, B[id].rt));
}
inline void add(int p) {
  if (bad0) return;
  int a = A[p];
  if (a > 0)
    S[++tp] = make_pair(0, make_pair(a, a));
  else {
    a = -a;
    if (tp) {
      if (S[tp].first) {
        if (B[S[tp].first].R[S[tp].second.second] == a) {
          if (S[tp].second.first == (S[tp].second.second--)) --tp;
        } else
          bad0 = true;
      } else {
        if (S[tp].second.second == a)
          --tp;
        else
          bad0 = true;
      }
    } else
      bad0 = true;
  }
  int i;
}
inline void bug(int b) {
  int i;
  for (i = (1); i <= (b); ++i) B[i].bug();
  cerr << "    "
       << "==================\n";
  ;
}
inline void ac() {
  int n, k, q, i, j, l, r, b = 0;
  for (i = (1); i < (K); ++i) E[i] = E[i - 1] * base % p;
  cin >> n >> k;
  for (i = (1); i <= (n); ++i) cin >> A[i];
  k = sqrt(n / C) - 1.0;
  for (i = 1; i <= n; i = j + 1) {
    j = min(n, i + k);
    ++b;
    for (l = (i); l <= (j); ++l) I[l] = b;
    B[b].l = i;
    B[b].r = j;
    B[b].rb();
  }
  cin >> q;
  while (q--) {
    cin >> i >> l >> r;
    if (i == 1) {
      A[l] = r;
      B[I[l]].rb();
    } else {
      bad0 = false;
      tp = 0;
      if (I[l] == I[r])
        for (i = (l); i <= (r); ++i) add(i);
      else {
        for (i = (l); i <= (B[I[l]].r); ++i) add(i);
        for (i = (I[l] + 1); i < (I[r]); ++i) adb(i);
        for (i = (B[I[r]].l); i <= (r); ++i) add(i);
      }
      if (!bad0 && !tp)
        cout << "Yes\n";
      else
        cout << "No\n";
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  ac();
  return 0;
}
