
代码:
#include<iostream>
#include<cmath>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<list>
#include<stack>
#include<queue>
#include<cstdio>
using namespace std;
struct stone
{
long long x;
long long a;
}c[200001];
bool cmp(stone a,stone b)
{
return a.x<b.x;
}
long long num(int k)
{
long long sum=0;
while(k)
{
sum+=k;
k--;
}
return sum;
}
int main()
{
long long n,m,sum=0;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>c[i].x;
}
for(int i=1;i<=m;i++)
{
cin>>c[i].a;
sum+=c[i].a;
}
c[m+1].x=n+1;
sort(c+1,c+1+m,cmp);
if(sum==n)
{
if(c[1].x==1)
{
long long ans=0;
for(int i=1;i<=m;i++)
{
if(c[i].a<c[i+1].x-c[i].x)
{
cout<<-1;
return 0;
}
else
{
ans+=num(c[i+1].x-c[i].x-1);
}
}
cout<<ans;
}
else
{
cout<<-1;
}
}
else
{
cout<<-1;
}
return 0;
}