# include <bits/stdc++.h>
using namespace std;
# define fi cin
# define fo cout
# define x first
# define y second
# define ll long long
# define db long double
# define scn(x) scanf("%I64d",&x)
# define scan(x) scanf("%d",&x)
# define print(x) printf("%d ",x)
# define prnt(x) printf("%I64d ",x);
# define eol printf("\n")
# define IOS ios_base :: sync_with_stdio(0)
# define pe "Possible"
# define ie "Impossible"
# define halt(...) {fo << (__VA_ARGS__) << '\n';exit(0);}
# define rep(n) for (int qwerty = 1;qwerty <= n;++qwerty)
# define pp(n) cerr << #n << " = " << n << '\n'
# define ppp(v) for (auto it : v) cerr << it << ' ';cerr << '\n'
# define pii pair < int , int >
const int mod = 1e9 + 7;
int s[1 << 20];
int ans[1 << 20];
vector < pair < int , int > > Q[1 << 20];
int Left[1 << 20];
int Right[1 << 20];
int cnt[1 << 20];
int v[1 << 20];
void build(int p,int u,int node)
{
if (p == u) v[node] = (!Left[p] ? 0 : p - Left[p]);
else
{
int m = (p + u) / 2;
build(p,m,node << 1);
build(m+1,u,node << 1 | 1);
v[node] = max(v[node << 1],v[node << 1 | 1]);
}
}
void update(int p,int u,int pos,int val,int node)
{
if (p == u) v[node] = val;
else
{
int m = (p + u) / 2;
if (pos <= m) update(p,m,pos,val,node << 1);
else update(m+1,u,pos,val,node << 1 | 1);
v[node] = max(v[node << 1],v[node << 1 | 1]);
}
}
int query(int p,int u,int l,int r,int node)
{
if (l <= p && u <= r) return v[node];
int ans = 0,m = (p + u) / 2;
if (l <= m) ans = max(ans,query(p,m,l,r,node << 1));
if (m+1<=r) ans = max(ans,query(m+1,u,l,r,node << 1 | 1));
return ans;
}
int main(void)
{
ifstream fi("pq.in");
ofstream fo("pq.out");
int n,m;
IOS;
fi>>n>>m;
for (int i = 1;i <= n;++i) fi>>s[i],++s[i];
for (int i = 1;i <= m;++i)
{
int l,r;
fi>>l>>r;
Q[l].push_back({r,i});
}
for (int i = 1;i <= n;++i)
{
Left[i] = cnt[s[i]];
cnt[s[i]] = i;
}
memset(cnt,0,sizeof(cnt));
for (int i = n;i;--i)
{
Right[i] = cnt[s[i]];
cnt[s[i]] = i;
}
build(1,n,1);
for (int i = 1;i <= n;++i)
{
for (auto it : Q[i])
ans[it.y] = query(1,n,i,it.x,1);
if (Right[i]) update(1,n,Right[i],0,1);
}
for (int i = 1;i <= m;++i) fo << (!ans[i] ? -1 : ans[i]) << '\n';
return 0;
}