#include<bits/stdc++.h>
#define il inline
#define ui unsigned int
#define ll long long
#define ull unsigned ll
#define lll __int128
#define db double
#define ldb long double
#define pii pair<int,int>
#define pli pair<ll,int>
#define vi vector<int>
#define vpii vector<pii>
#define fir first
#define sec second
#define gc getchar
#define pc putchar
#define mst(a,x) memset(a,x,sizeof a)
#define mcp(a,b) memcpy(a,b,sizeof b)
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define pct __builtin_popcount
#define sz(S) int(S.size())
#define cw(A,B) (A)&&(B,0)
using namespace std;
const int N=2e5+10,V=6e5+10,E=1.2e6+10,INF=0x3f3f3f3f,MOD=998244353; const ll INFll=0x3f3f3f3f3f3f3f3f;
il int rd() {int x=0,f=1; char ch=gc(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=gc();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=gc(); return x*f;}
il ll rdll() {ll x=0; int f=1; char ch=gc(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=gc();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=gc(); return x*f;}
il void wr(int x) {if(x==INT_MIN) return printf("-2147483648"),void(); if(x<0) return pc('-'),wr(-x); if(x<10) return pc(x+'0'),void(); wr(x/10),pc(x%10+'0');}
il void wrll(ll x) {if(x==LONG_LONG_MIN) return printf("-9223372036854775808"),void(); if(x<0) return pc('-'),wrll(-x); if(x<10) return pc(x+'0'),void(); wrll(x/10),pc(x%10+'0');}
il void wr(int x,char *s) {wr(x),printf("%s",s);}
il void wrll(ll x,char *s) {wrll(x),printf("%s",s);}
il int vmod(int x) {return x>=MOD?x-MOD:x;}
il int vadd(int x,int y) {return vmod(x+y);}
il int vsub(int x,int y) {return vmod(x-y+MOD);}
il int vmul(int x,int y) {return 1ll*x*y%MOD;}
il int qpow(int x,int y) {int res=1; for(;y;y>>=1,x=vmul(x,x)) if(y&1) res=vmul(res,x); return res;}
il void cadd(int &x,int y) {x=vmod(x+y);}
il void csub(int &x,int y) {x=vmod(x-y+MOD);}
il void cmul(int &x,int y) {x=vmul(x,y);}
il void cmax(int &x,int y) {cw(x<y,x=y);}
il void cmaxll(ll &x,ll y) {cw(x<y,x=y);}
il void cmin(int &x,int y) {cw(x>y,x=y);}
il void cminll(ll &x,ll y) {cw(x>y,x=y);}
int n,m,a[N],b[N],c[N],d[N];
struct GRAPH {
int id,hd[V]; ll dis[V]; priority_queue<pli> q;
struct EDGE {int to,w,ne;} e[E];
void add(int x,int y,int z) {e[++id]={y,z,hd[x]},hd[x]=id;}
ll dij(int s,int t) {
mst(dis,0x3f),dis[s]=0,q.push({0,s});
for(int u;q.size();) {
u=q.top().sec,q.pop();
for(int i=hd[u],v;i;i=e[i].ne) if(dis[u]+e[i].w<dis[v=e[i].to]) dis[v]=dis[u]+e[i].w,q.push({-dis[v],v});
}
return dis[t];
}
} g;
void QwQ() {
n=rd(),m=rd(); for(int i=1;i<=n;i++) a[i]=rd(); for(int i=1;i<=n;i++) b[i]=rd(),c[i]=i;
sort(c+1,c+1+n,[&](int x,int y) {return b[x]<b[y];}); for(int i=1;i<=n;i++) d[c[i]]=i;
for(int i=1,l,r,md;i<=n;i++) {
g.add(i+n,i,b[c[i]]),g.add(i+n,i+n-1,0),g.add(i+n*2,i,0),g.add(i+n*2,i+n*2+1,b[c[i+1]]-b[c[i]]);
for(l=1,r=n;l<=r;) b[c[md=l+r>>1]]>=m-a[c[i]]?r=md-1:l=md+1;
cw(l>1,g.add(i,l+n-1,a[c[i]])),cw(l<=n,g.add(i,l+n*2,a[c[i]]+b[c[l]]-m));
}
wr(g.dij(d[1],d[n]),"\n");
}
signed main() {
int T=1; while(T--) QwQ();
}