#include <iostream>
#include <vector>
#include <unordered_map>
#include <set>
using namespace std;
int main() {
int n, q;
cin >> n >> q;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
vector<pair<int, int>> q1(q);
for (int i = 0; i < q; i++) {
int l, r;
cin >> l >> r;
q1[i] = {l - 1, r - 1};
}
for (auto query : q1) {
int l = query.first, r = query.second;
unordered_map<int, int> count;
set<int> a;
for (int i = l; i <= r; i++) {
a.insert(a[i]);
count[a[i]]++;
}
int t = a.size();
unordered_map<int, int> cnt;
int have = 0;
int min_length = r - l + 1;
int left = l;
for (int right = l; right <= r; right++) {
int elem = a[right];
cnt[elem]++;
if (cnt[elem] == count[elem]) {
have++;
}
while (have == t) {
min_length = min(min_length, right - left + 1);
int left_elem = a[left];
cnt[left_elem]--;
if (cnt[left_elem] < count[left_elem]) {
have--;
}
left++;
}
}
cout << min_length << endl;
}
return 0;
}