// #pragma GCC optimize("Ofast")
// #pragma GCC target("avx,avx2,fma")
// #pragma GCC optimization ("unroll-loops")

#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define clr clear()
#define ins insert
#define tol(s) transform(s.begin(),s.end(),s.begin(),::tolower);
#define tou(s) transform(s.begin(),s.end(),s.begin(),::toupper);
#define rep(i,n) for(__typeof(n) i=0; i<(n); i++)
#define mem(x,val) memset((x),(val),sizeof(x));
#define cusmem(x,val) for(auto &i:x) i=val;
#define all(x) x.begin(),x.end()
#define fastio ios_base::sync_with_stdio(false);\
            cin.tie(NULL);\
            cout.tie(NULL);
using namespace std;
typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
typedef pair<ll,int>pli;
typedef vector<ll> vl;
typedef vector<pll> vpll;
typedef vector<int> vi;
typedef vector<bool> vb;
typedef vector<pii> vpii;
string impossible;

mt19937 mt_rand(chrono::high_resolution_clock::now().time_since_epoch().count());

// const int N=6;
const int N=5e2+5;
const int M=1e4+5;
const int L=41;
int MOD=1e9+7;
ll n,m,k,i,j,d;
bool f0,f1,f2;
const int MAXN=2e3;
int main(){
    #ifndef ONLINE_JUDGE
            freopen("input.txt","r",stdin); 
            freopen("output.txt","w",stdout);
    #endif
    fastio
    cout<<fixed<<setprecision(11);
    int tests=1;    
    // cin>>tests;
    for(int te=1;te<=tests;te++){
        ll n,ops;    cin>>n>>ops;
        ll sc=INT_MIN;
        vector<vector<ll>>cycs;
        vector<ll>p(n+1),c(n+1);
        for(int i=1;i<=n;i++)    cin>>p[i];
        for(int i=1;i<=n;i++)    cin>>c[i];
        vector<bool>vis(n+1,false);
        for(int i=1;i<=n;i++){
            if(vis[i])  continue;
            else{
                int j=i;
                vector<ll>cur;
                do{
                    vis[j]=true;
                    cur.pb(c[j]);
                    j=p[j];
                }
                while(j!=i);
                cycs.pb(cur);
            }
        }
        int nc=cycs.size();
        // for(int i=0;i<nc;i++){
        //     for(auto j:cycs[i])
        //         cout<<j<<" ";
        //     cout<<"\n";
        // }
        for(int i=0;i<nc;i++){
            ll s=0;
            for(auto j:cycs[i])    s+=j;
            ll ncyc=cycs[i].size();
            ll rem=ops%ncyc;
            ll best=INT_MIN,brem=0;
            vector<ll>pre(ncyc,0);
            pre[0]=cycs[i][0];
            for(int j=1;j<ncyc;j++){
                pre[j]=pre[j-1]+cycs[i][j];
            }
            for(int j=1;j<=min(ncyc,ops);j++){
                ll st=pre[j-1];
                // cout<<st<<" ";
                best=max(best,st);
                if(j<=rem)  brem=max(brem,st);
                for(int k=j;k<ncyc;k++){
                    st+=cycs[i][k];
                    st-=cycs[i][k-j];
                    best=max(best,st);
                    if(j<=rem)  brem=max(brem,st);
                // cout<<st<<" ";
                }
                for(int k=0;k<j-1;k++){
                    st+=cycs[i][k];
                    st-=cycs[i][(k-j+ncyc)%ncyc];
                    best=max(best,st);
                    if(j<=rem)  brem=max(brem,st);
                // cout<<st<<" ";
                }
                // cout<<"\n";
            }
            // cout<<best<<" "<<brem<<"\n";
            ll no=ops/ncyc;
            sc=max(sc,best);
            if(no>0)
                sc=max(sc,max(no*s+brem,(no-1)*s+best));
        }
        cout<<sc;

    }
    return 0;
}





Measured memory_bytes: 3836