#include<bits/stdc++.h>
using namespace std;

const int MOD= 1e9+7;
const int N= 1e6+1;
int f[N],depth[N],vis[N];
long long int ans=1;
int n,k;
int dfs(int node)
{
    if(vis[node])
    {
        if(depth[node]==-1)
          return k;
        else
            return (depth[node]-1);
    }
        
    else{
        vis[node]=1;
        if(f[node]==node)
        {
            depth[node]=k;
            ans*=k;
            ans%=MOD;
            return (depth[node]-1);
        }
        else
        {
          depth[node] = dfs(f[node]);
           // cout<<node<<" "<<depth[node]<<endl;
      	  ans*=depth[node];
          ans%=MOD;
          return (depth[node]-1);
        }

    }
}
int main() {

    cin>>n>>k;
    
    
    
    for(int i=1;i<=n;i++)
        cin>>f[i],depth[i]=-1,vis[i]=0;
    
    for(int i=1;i<=n;i++)
    {
        int st=i;
        while(!vis[st])
        {
            dfs(st);
        }  
    }
    cout<<ans;
    return 0;
}