#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
const int INF = 0x3f3f3f3f;
const double eps = 1e-8;
const double PI = acos(-1.);
const double E = 2.71828182845904523536;
const int MOD = 100000;
const int N = 5e5 + 10;
int n, m, op, L, R, x;
int l[N], r[N], belong[N], blocksz, blockcnt;
vector<pair<long long, int> > G[N];
long long a[N], lazy[N];
void init() {
  blocksz = sqrt(n);
  blockcnt = n / blocksz;
  if (n % blocksz) blockcnt++;
  for (int i = 1; i <= blockcnt; i++)
    l[i] = (i - 1) * blocksz + 1, r[i] = i * blocksz;
  r[blockcnt] = n;
  for (int i = 1; i <= n; i++) belong[i] = (i - 1) / blocksz + 1;
  for (int i = 1; i <= blockcnt; i++) {
    for (int j = l[i]; j <= r[i]; j++) G[i].push_back(make_pair(a[j], j));
    sort(G[i].begin(), G[i].end());
  }
}
void modify() {
  int blk = belong[L];
  G[blk].clear();
  for (int i = L; i <= min(r[blk], R); i++) a[i] += x;
  for (int i = l[blk]; i <= r[blk]; i++) G[blk].push_back(make_pair(a[i], i));
  sort(G[blk].begin(), G[blk].end());
  for (int i = blk + 1; i < belong[R]; i++) lazy[i] += x;
  if (belong[L] == belong[R]) return;
  blk = belong[R];
  G[belong[R]].clear();
  for (int i = l[belong[R]]; i <= R; i++) a[i] += x;
  for (int i = l[blk]; i <= r[blk]; i++) G[blk].push_back(make_pair(a[i], i));
  sort(G[blk].begin(), G[blk].end());
}
long long query() {
  L = INF, R = -1;
  for (int i = 1; i <= blockcnt; i++) {
    long long t = x;
    if (lazy[i]) t -= lazy[i];
    int id = lower_bound(G[i].begin(), G[i].end(), make_pair(t, -INF)) -
             G[i].begin();
    if (id != G[i].size() && G[i][id].first == t) L = min(L, G[i][id].second);
    id =
        upper_bound(G[i].begin(), G[i].end(), make_pair(t, INF)) - G[i].begin();
    if (id != 0 && G[i][id - 1].first == t) R = max(R, G[i][id - 1].second);
  }
  if (R == -1) return -1;
  return R - L;
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
  init();
  memset(lazy, 0, sizeof(lazy));
  for (int i = 1; i <= m; i++) {
    scanf("%d", &op);
    if (op == 1) {
      scanf("%d%d%d", &L, &R, &x);
      modify();
    } else {
      scanf("%d", &x);
      cout << query() << endl;
    }
  }
  return 0;
}
