#include <bits/stdc++.h>
using namespace std;
const int maxn = 500000 + 10;
int n, q;
struct Tdata {
  int pos;
  long long num;
} a[maxn];
long long add[maxn];
int each, m;
bool cmp(Tdata q, Tdata p) {
  if (q.num == p.num)
    return q.pos < p.pos;
  else
    return q.num < p.num;
}
void update(int M, int l, int r, long long x) {
  int left = M * each;
  int right = min(n, (M + 1) * each);
  for (int i = left; i < right; i++) {
    if (a[i].pos >= l && a[i].pos <= r) a[i].num += x;
  }
  sort(a + left, a + right, cmp);
}
int find1(int low, int high, long long x, long long M) {
  int mid;
  low--;
  while (low + 1 < high) {
    mid = (low + high) >> 1;
    if (a[mid].num + M >= x)
      high = mid;
    else
      low = mid;
  }
  if (high >= n || a[high].num + M != x) return n + 1;
  return a[high].pos;
}
int find2(int low, int high, long long x, long long M) {
  int mid;
  low--;
  while (low + 1 < high) {
    mid = (low + high) >> 1;
    if (a[mid].num + M <= x)
      low = mid;
    else
      high = mid;
  }
  if (low < 0 || a[low].num + M != x) return -1;
  return a[low].pos;
}
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 0; i < n; ++i) {
    scanf("%lld", &a[i].num);
    a[i].pos = i;
  }
  each = int(sqrt(n));
  m = n / each + 1;
  for (int i = 0; i < m; i++) {
    sort(a + i * each, a + min((i + 1) * each, n), cmp);
  }
  memset(add, 0, sizeof(add));
  int od, l, r, x;
  while (q--) {
    scanf("%d", &od);
    if (od == 1) {
      scanf("%d%d%d", &l, &r, &x);
      l--, r--;
      int L = l / each;
      int R = r / each;
      update(L, l, r, x);
      if (L != R) update(R, l, r, x);
      for (int i = L + 1; i < R; ++i) {
        add[i] += x;
      }
    } else {
      scanf("%d", &x);
      int min_pos = n + 1;
      int max_pos = -1;
      for (int i = 0; i < m; i++) {
        min_pos =
            min(find1(i * each, min((i + 1) * each, n), x, add[i]), min_pos);
        max_pos =
            max(find2(i * each, min((i + 1) * each, n), x, add[i]), max_pos);
      }
      if (max_pos == -1)
        puts("-1");
      else
        printf("%d\n", max_pos - min_pos);
    }
  }
  return 0;
}
