#include <bits/stdc++.h>
const int N = 500500, K = 1024;
int n, q, m;
struct element {
  int k, par;
  long long val;
  const bool operator<(const element &b) const {
    return val == b.val ? k < b.k : val < b.val;
  }
} a[N];
struct block {
  int l, r, ul, ur, uv, re;
  long long d;
  bool f;
  block() { l = N, r = -1, re = N, uv = 0; }
  void init(int k) {
    if (k < l) l = k;
    if (k > r) r = k;
    f = true;
  }
  void add(long long x) { d += x; }
  void setUpd(int x, int y, int r) {
    if (f && r != re) upd();
    if (!f) ul = ur = x, uv = y, re = r;
    f = true;
    if (x < ul) ul = x;
    if (x > ur) ur = x;
  }
  void upd() {
    if (f) {
      for (int i = l; i <= r; i++)
        if (a[i].k >= ul && a[i].k <= ur) a[i].val += uv;
      std::sort(a + l, a + r + 1);
      f = false;
    }
  }
  int getLeft(long long y) {
    upd();
    y -= d;
    int l = this->l, r = this->r;
    while (l < r) {
      int t = (l + r) / 2;
      if (a[t].val < y)
        l = t + 1;
      else
        r = t;
    }
    return a[l].val == y ? a[l].k : n;
  }
  int getRight(long long y) {
    upd();
    y -= d;
    int l = this->l, r = this->r;
    while (l < r) {
      int t = (l + r + 1) / 2;
      if (a[t].val > y)
        r = t - 1;
      else
        l = t;
    }
    return a[l].val == y ? a[l].k : -1;
  }
} blocks[N / K + 1];
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i].val);
    a[i].k = i;
    int par = i / K;
    a[i].par = par;
    m = par + 1;
    blocks[par].init(i);
  }
  while (q--) {
    int t;
    scanf("%d", &t);
    if (t == 1) {
      int l, r, x;
      scanf("%d%d%d", &l, &r, &x);
      --l, --r;
      for (int i = l; i <= r; i++) {
        if (i + K <= r && i % K == 0) {
          blocks[a[i].par].add(x);
          i += K - 1;
        } else
          blocks[a[i].par].setUpd(i, x, q);
      }
    } else {
      int y;
      scanf("%d", &y);
      int le = n, ri = -1;
      for (int i = 0; i < m; i++) {
        int cx = blocks[i].getLeft(y), cy = blocks[i].getRight(y);
        if (cx < le) le = cx;
        if (cy > ri) ri = cy;
      }
      printf("%d\n", ri >= le ? ri - le : -1);
    }
  }
  return 0;
}
