#include <bits/stdc++.h>
using namespace std;
vector<pair<long long, int> > have[505000];
int n, m, Siz, mx, mn, idx;
long long num[505000], tag[505000];
int find1(int p, long long x) {
  int l = 0, r = have[p].size();
  while (l < r) {
    int mid = (l + r) >> 1;
    if (have[p][mid].first > x)
      r = mid;
    else
      l = mid + 1;
  }
  if (l == 0) return 0;
  return have[p][l - 1].first == x ? have[p][l - 1].second : 0;
}
int find2(int p, long long x) {
  int l = 0, r = have[p].size();
  while (l < r) {
    int mid = (l + r) >> 1;
    if (have[p][mid].first >= x)
      r = mid;
    else
      l = mid + 1;
  }
  if (l == (int)have[p].size()) return n + 1;
  return have[p][l].first == x ? have[p][l].second : n + 1;
}
int main() {
  scanf("%d%d", &n, &m), Siz = sqrt(n);
  for (int i = 1; i <= n; i++) scanf("%d", &num[i]);
  for (int i = 1; i <= n; i++)
    have[(i / Siz + (i % Siz != 0))].push_back(make_pair(num[i], i));
  for (int i = 1; (i / Siz + (i % Siz != 0)) <= (n / Siz + (n % Siz != 0));
       i += Siz)
    sort(have[(i / Siz + (i % Siz != 0))].begin(),
         have[(i / Siz + (i % Siz != 0))].end());
  for (int i = 1, kind, x, y, z; i <= m; i++) {
    scanf("%d", &kind);
    if (kind == 1) {
      scanf("%d%d%d", &x, &y, &z);
      if ((x / Siz + (x % Siz != 0)) == (y / Siz + (y % Siz != 0))) {
        for (int j = x; j <= y; j++) num[j] += z;
        have[(x / Siz + (x % Siz != 0))].clear();
        for (int j = x - 1;
             (x / Siz + (x % Siz != 0)) == (j / Siz + (j % Siz != 0)); j--)
          have[(j / Siz + (j % Siz != 0))].push_back(make_pair(num[j], j));
        for (int j = x;
             (x / Siz + (x % Siz != 0)) == (j / Siz + (j % Siz != 0)) && j <= n;
             j++)
          have[(j / Siz + (j % Siz != 0))].push_back(make_pair(num[j], j));
        sort(have[(x / Siz + (x % Siz != 0))].begin(),
             have[(x / Siz + (x % Siz != 0))].end());
        continue;
      }
      have[(x / Siz + (x % Siz != 0))].clear();
      for (int j = x; (x / Siz + (x % Siz != 0)) == (j / Siz + (j % Siz != 0));
           j++)
        num[j] += z;
      for (int j = x - 1;
           (x / Siz + (x % Siz != 0)) == (j / Siz + (j % Siz != 0)); j--)
        have[(x / Siz + (x % Siz != 0))].push_back(make_pair(num[j], j));
      for (int j = x;
           (x / Siz + (x % Siz != 0)) == (j / Siz + (j % Siz != 0)) && j <= n;
           j++)
        have[(x / Siz + (x % Siz != 0))].push_back(make_pair(num[j], j));
      sort(have[(x / Siz + (x % Siz != 0))].begin(),
           have[(x / Siz + (x % Siz != 0))].end());
      have[(y / Siz + (y % Siz != 0))].clear();
      for (int j = y; (y / Siz + (y % Siz != 0)) == (j / Siz + (j % Siz != 0));
           j--)
        num[j] += z;
      for (int j = y - 1;
           (y / Siz + (y % Siz != 0)) == (j / Siz + (j % Siz != 0)); j--)
        have[(y / Siz + (y % Siz != 0))].push_back(make_pair(num[j], j));
      for (int j = y;
           (y / Siz + (y % Siz != 0)) == (j / Siz + (j % Siz != 0)) && j <= n;
           j++)
        have[(y / Siz + (y % Siz != 0))].push_back(make_pair(num[j], j));
      sort(have[(y / Siz + (y % Siz != 0))].begin(),
           have[(y / Siz + (y % Siz != 0))].end());
      for (int j = (x / Siz + (x % Siz != 0)) + 1;
           j < (y / Siz + (y % Siz != 0)); j++)
        tag[j] += z;
      continue;
    }
    scanf("%d", &x), mx = 0, mn = n + 1, ++idx;
    for (int j = 1; (j / Siz + (j % Siz != 0)) <= (n / Siz + (n % Siz != 0));
         j += Siz)
      mx = max(find1((j / Siz + (j % Siz != 0)),
                     x - tag[(j / Siz + (j % Siz != 0))]),
               mx),
      mn = min(find2((j / Siz + (j % Siz != 0)),
                     x - tag[(j / Siz + (j % Siz != 0))]),
               mn);
    if (mx && mn <= n && num[mx] + tag[(mx / Siz + (mx % Siz != 0))] == x &&
        num[mn] + tag[(mn / Siz + (mn % Siz != 0))] == x)
      printf("%d\n", mx - mn);
    else
      printf("-1\n");
  }
}
