#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
using namespace std;
const int maxn = 2e5+7;
vector<int> E[maxn];
stack<int> stk;
int dfn[maxn],low[maxn],vis[maxn],tot,n,ans = maxn;
void tarjan(int u){
low[u] = dfn[u] = ++ tot;
stk.push(u);
vis[u] = 1;
for(int i = 0;i < E[u].size();i ++){
int v = E[u][i];
if(dfn[v] == 0){
tarjan(v);
low[u] = min(low[u],low[v]);
}
else if(vis[v] == 1){
low[u] = min(low[u],dfn[v]);
}
}
if(dfn[u] == low[u]){
int cnt = 0;
while(1){
int t = stk.top();
stk.pop();
vis[t] = 0;
cnt ++;
if(t == u) break;
}
if(cnt > 1) ans = min(ans,cnt);
}
}
int main()
{
cin>>n;
for(int i = 1;i <= n;i ++){
int x;
cin>>x;
E[i].push_back(x);
}
for(int i = 1;i <= n;i ++){
if(!dfn[i]){
tarjan(i);
}
}
cout<<ans<<endl;
}