#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
const long long INF = 1e15;
const long long MOD = 1e9 + 7;
const int N = 1000005;
const int M = 600000;
struct Point {
  int x;
  long long v;
  Point() {}
  Point(int x, long long v) : x(x), v(v) {}
  void read(int o) {
    x = o;
    scanf("%I64d", &v);
  }
  bool operator<(const Point& a) const { return v == a.v ? x < a.x : v < a.v; }
} A[500005];
int n, q, d;
long long add[1000];
void build() {
  d = (int)sqrt(n + 0.5);
  for (int i = 1; i <= n; i += d) {
    sort(A + i, A + min(i + d, n + 1));
  }
}
int search(int x) { return (x + d - 1) / d; }
int found(int l, int r, long long v) {
  int L = l, R = r;
  int res = l - 1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (A[mid].v >= v)
      r = mid - 1;
    else {
      res = mid;
      l = mid + 1;
    }
  }
  res++;
  if (res <= R && A[res].v == v) return res;
  return -1;
}
int found(int l, int r, long long v, int _) {
  int L = l, R = r;
  int res = r + 1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (A[mid].v <= v)
      l = mid + 1;
    else {
      res = mid;
      r = mid - 1;
    }
  }
  res--;
  if (res >= L && A[res].v == v) return res;
  return -1;
}
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 1; i <= n; i++) A[i].read(i);
  build();
  int k, l, r;
  long long v;
  while (q--) {
    scanf("%d", &k);
    if (k == 1) {
      scanf("%d%d%I64d", &l, &r, &v);
      int x = search(l);
      int y = search(r);
      if (x != y) {
        for (int i = x + 1; i < y; i++) add[i] += v;
        for (int i = (x - 1) * d + 1; i <= x * d && i <= n; i++)
          if (A[i].x >= l) {
            A[i].v += v;
          }
        sort(A + (x - 1) * d + 1, A + min(x * d, n) + 1);
        for (int i = (y - 1) * d + 1; i <= y * d && i <= n; i++)
          if (A[i].x <= r) {
            A[i].v += v;
          }
        sort(A + (y - 1) * d + 1, A + min(y * d, n) + 1);
      } else {
        for (int i = (x - 1) * d + 1; i <= x * d && i <= n; i++)
          if (A[i].x >= l && A[i].x <= r) {
            A[i].v += v;
          }
        sort(A + (x - 1) * d + 1, A + min(x * d, n) + 1);
      }
    } else {
      scanf("%I64d", &v);
      l = -1;
      for (int i = 1; i <= n; i += d) {
        int tmp;
        if (l == -1) {
          tmp = found(i, min(i + d - 1, n), v - add[i / d + 1]);
          if (tmp != -1) l = r = A[tmp].x;
        }
        tmp = found(i, min(i + d - 1, n), v - add[i / d + 1], 1);
        if (tmp != -1) r = A[tmp].x;
      }
      if (l == -1) r = -2;
      printf("%d\n", r - l);
    }
  }
  return 0;
}
