#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1e-9;
const int K = 2000;
const int MAXN = 5e5 + 10;
int a[MAXN];
struct Block {
  vector<pair<long long, int>> vals;
  int L, R;
  long long add;
  Block() {}
  Block(int l, int r) : L(l), R(r), add(0) {
    for (int i = l; i <= r; ++i) {
      vals.push_back(make_pair(a[i], i));
    }
    sort(begin(vals), end(vals));
  }
  void print() const {
    for (int i = 0; i < (int)((int)(vals).size()); ++i) {
      printf("%I64d %d\n", vals[i].first, vals[i].second);
    }
    printf("+= %I64d\n", add);
    puts("");
  }
  void go_add(int l, int r, long long Add) {
    l = max(l, L);
    r = min(r, R);
    if (l > r) {
      return;
    }
    if (l == L && r == R) {
      add += Add;
    } else {
      vector<pair<long long, int>> vals1;
      vector<pair<long long, int>> vals2;
      for (int i = 0; i < (int)((int)(vals).size()); ++i) {
        long long val = vals[i].first;
        int pos = vals[i].second;
        bool in = l <= pos && pos <= r;
        if (in) {
          vals1.push_back(make_pair(val + Add, pos));
        } else {
          vals2.push_back(make_pair(val, pos));
        }
      }
      merge(begin(vals1), end(vals1), begin(vals2), end(vals2), vals.begin());
    }
  }
  int yytrwtretywretwreytwreytwr(long long y) {
    int pos = upper_bound(begin(vals), end(vals), make_pair(y - add, MAXN)) -
              vals.begin();
    --pos;
    if (0 <= pos && pos < ((int)(vals).size())) {
      return vals[pos].first == y - add ? vals[pos].second : -1;
    }
    return -1;
  }
  int sdhfsjkshdjkfsdfgkqqweqweh(long long y) {
    int pos = lower_bound(begin(vals), end(vals), make_pair(y - add, -1)) -
              vals.begin();
    if (0 <= pos && pos < ((int)(vals).size())) {
      return vals[pos].first == y - add ? vals[pos].second : -1;
    }
    return -1;
  }
};
vector<Block> blocks;
int n, q;
int main() {
  cin >> n >> q;
  for (int i = 0; i < (int)n; ++i) {
    scanf("%d", &a[i]);
  }
  for (int i = 0; i < n; i += K) {
    blocks.push_back(Block(i, min(n - 1, i + K - 1)));
  }
  while (q--) {
    int t;
    scanf("%d", &t);
    if (t == 1) {
      int l, r, x;
      scanf("%d%d%d", &l, &r, &x);
      --l;
      --r;
      for (auto& b : blocks) {
        b.go_add(l, r, x);
      }
    } else {
      int sdhfsjkshdjkfsdfgkqqweqweh = MAXN;
      int yytrwtretywretwreytwreytwr = -1;
      int y;
      scanf("%d", &y);
      for (auto& b : blocks) {
        int l = b.sdhfsjkshdjkfsdfgkqqweqweh(y);
        if (l != -1)
          sdhfsjkshdjkfsdfgkqqweqweh = min(sdhfsjkshdjkfsdfgkqqweqweh, l);
        int r = b.yytrwtretywretwreytwreytwr(y);
        if (r != -1)
          yytrwtretywretwreytwreytwr = max(yytrwtretywretwreytwreytwr, r);
      }
      printf("%d\n",
             max(-1, yytrwtretywretwreytwreytwr - sdhfsjkshdjkfsdfgkqqweqweh));
    }
  }
  return 0;
}
