#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool rd(T &ret) {
  char c;
  int sgn;
  if (c = getchar(), c == EOF) return 0;
  while (c != '-' && (c < '0' || c > '9')) c = getchar();
  sgn = (c == '-') ? -1 : 1;
  ret = (c == '-') ? 0 : (c - '0');
  while (c = getchar(), c >= '0' && c <= '9') ret = ret * 10 + (c - '0');
  ret *= sgn;
  return 1;
}
template <class T>
inline void pt(T x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x > 9) pt(x / 10);
  putchar(x % 10 + '0');
}
const int inf = 1e9;
const int N = 5e5 + 10;
const int Block = 850;
int n, q;
int ansl, ansr;
struct Node {
  struct Point {
    long long a;
    int id;
    Point(long long _a = 0, long long _id = 0) : a(_a), id(_id) {}
    bool operator<(const Point &x) const {
      if (x.a != a) return a < x.a;
      return id < x.id;
    }
  } x[Block], tmp;
  long long b;
  int top;
  inline void Sort() { sort(x, x + top); }
  inline void add(int l, int r, int val) {
    if (r - l + 1 == top)
      b += val;
    else {
      for (int i = 0; i < top; i++)
        if (l <= x[i].id && x[i].id <= r) x[i].a += val;
      Sort();
    }
  }
  inline void find(long long y) {
    y -= b;
    if (y < x[0].a || x[top - 1].a < y) return;
    tmp = {y, -inf};
    int l = lower_bound(x, x + top, tmp) - x;
    if (l == top || x[l].a != y) return;
    tmp.id = inf;
    int r = lower_bound(x, x + top, tmp) - x - 1;
    ansl = min(ansl, x[l].id);
    ansr = max(ansr, x[r].id);
  }
} y[Block];
int a[N], block;
int main() {
  rd(n);
  rd(q);
  for (int i = 0; i < n; i++) rd(a[i]);
  block = 0;
  for (int i = 0; i < n; i += Block, block++) {
    for (int j = 0; i + j < n && j < Block; j++) {
      y[block].x[j].a = a[i + j];
      y[block].x[j].id = i + j;
      y[block].top++;
    }
    y[block].Sort();
  }
  int op, l, r, val;
  while (q--) {
    rd(op);
    if (op == 1) {
      rd(l);
      rd(r);
      rd(val);
      l--;
      r--;
      for (int i = l / Block; i <= r / Block; i++)
        y[i].add(max(l, i * Block), min(r, i * Block + Block - 1), val);
    } else {
      rd(val);
      ansl = inf, ansr = -inf;
      for (int i = 0; i < block; i++) y[i].find(val);
      if (ansr - ansl < 0)
        puts("-1");
      else
        pt(ansr - ansl), putchar('\n');
    }
  }
  return 0;
}
