#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e5 + 5;
int a[maxn];
struct Query {
  int l, r, idx;
} q[maxn];
int ans[maxn];
int M;
int tr[maxn];
int prv[maxn];
void fenw_set(int i, int x) {
  for (++i; i < maxn; i += -i & i) {
    tr[i] = min(tr[i], x);
  }
}
int fenw_get(int i) {
  int res = 1011111111;
  for (++i; i > 0; i -= -i & i) {
    res = min(res, tr[i]);
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  for (int _n(maxn), i(0); i < _n; i++) tr[i] = ans[i] = 1011111111;
  int N, Q;
  cin >> N >> Q;
  for (int _n(N), i(0); i < _n; i++) cin >> a[i];
  {
    M = 0;
    map<int, int> id;
    for (int _n(N), i(0); i < _n; i++) {
      if (!id.count(a[i])) {
        id[a[i]] = M;
        ++M;
      }
      a[i] = id[a[i]];
    }
  }
  for (int _n(Q), i(0); i < _n; i++) {
    cin >> q[i].l >> q[i].r;
    q[i].l--;
    q[i].r--;
    q[i].idx = i;
  }
  sort(q, q + Q, [](const Query &a, const Query &b) { return a.l > b.l; });
  memset((prv), (-1), sizeof(prv));
  int cnt = 0;
  for (int i = N - 1; i >= 0; --i) {
    if (prv[a[i]] != -1) {
      fenw_set(prv[a[i]], prv[a[i]] - i);
    }
    prv[a[i]] = i;
    while (cnt < Q && q[cnt].l == i) {
      ans[q[cnt].idx] = fenw_get(q[cnt].r);
      if (ans[q[cnt].idx] == 1011111111) ans[q[cnt].idx] = -1;
      ++cnt;
    }
  }
  for (int _n(Q), i(0); i < _n; i++) cout << ans[i] << endl;
  return 0;
}
