#include <bits/stdc++.h>
using namespace std;
long long int powmod(long long int a, long long int b) {
  if (b == 0) return 1;
  long long int x = powmod(a, b / 2);
  long long int y = (x * x) % 1000000007;
  if (b % 2) return (a * y) % 1000000007;
  return y % 1000000007;
}
long long int add[500010];
long long int a[500010];
vector<long long int> s[500010];
int main() {
  long long int BLOCK, BLOCKCNT;
  long long int n, q;
  scanf("%lld", &n);
  scanf("%lld", &q);
  for (int i = 0; i < n; i++) scanf("%lld", &a[i]);
  BLOCK = (long long int)(sqrt(n));
  BLOCKCNT = n / BLOCK;
  for (int i = 0; i < n; i++) s[i / BLOCK].push_back(a[i]);
  for (int i = 0; i < BLOCKCNT + 1; i++) sort((s[i]).begin(), (s[i]).end());
  long long int k = BLOCK;
  while (q--) {
    long long int ans = 0;
    long long int type;
    scanf("%lld\n", &type);
    if (type == 1) {
      long long int l, r, x;
      scanf("%lld", &l);
      scanf("%lld", &r);
      l--;
      r--;
      scanf("%lld", &x);
      int p = l;
      while (l % k != 0 && l <= r) {
        a[l] += x;
        l++;
      }
      for (int i = 0; i < (int)(s[(p) / BLOCK].size()); i++)
        s[(p) / BLOCK][i] = a[(p / BLOCK) * BLOCK + i];
      sort((s[(l - 1) / BLOCK]).begin(), (s[(l - 1) / BLOCK]).end());
      while ((l + k - 1) <= r) {
        add[l / BLOCK] += x;
        l += k;
      }
      p = l;
      while (l <= r) {
        a[l] += x;
        l++;
      }
      for (int i = 0; i < (int)(s[(r) / BLOCK].size()); i++)
        s[(r) / BLOCK][i] = a[(r / BLOCK) * BLOCK + i];
      sort((s[r / BLOCK]).begin(), (s[r / BLOCK]).end());
    } else {
      long long int y;
      scanf("%lld", &y);
      long long int mi = -1, ma = -1;
      long long int flag = 0;
      for (int i = 0; i < BLOCKCNT + 2; i++) {
        if (s[i].empty()) break;
        if (binary_search((s[i]).begin(), (s[i]).end(), y - add[i])) {
          for (int j = i * BLOCK; j < i * BLOCK + (int)(s[i].size()); j++) {
            if (a[j] == y - add[i]) {
              mi = (long long int)j;
              break;
            }
          }
          break;
        }
      }
      for (int i = BLOCKCNT + 2; i >= 0; i--) {
        if (s[i].empty()) continue;
        if (binary_search((s[i]).begin(), (s[i]).end(), y - add[i])) {
          for (long long int j = i * BLOCK + (int)(s[i].size()) - 1;
               j >= i * BLOCK; j--) {
            if (a[j] == y - add[i]) {
              ma = (long long int)j;
              break;
            }
          }
          break;
        }
      }
      if (mi == -1)
        printf("%lld\n", mi);
      else
        printf("%lld\n", ma - mi);
    }
  }
  return 0;
}
