#include<iostream>
#include<cmath>
#include<cstdio>
#include<iomanip>
#include<algorithm>
using namespace std;
int n,k,a[500005],b[250005],t,c[500005];
void ss(int x,int y)
{
int i,j;
c[x]=1;c[y]=1;
for(i=x+1;i<=y;i++)
{
int m=0;
for(j=x;j<i;j++)
if(a[i]>a[j]&&c[j]>0){
m=max(m,c[j]+1);
}
c[i]=m;
}
t+=c[y];
}
int main()
{
freopen("aa.in","r",stdin);
freopen("aa.out","w",stdout);
int i,j;
cin>>n>>k;
for(int i=1;i<=k;i++)cin>>b[i],c[b[i]]=1;//间隔
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(i<=b[1])c[i]=1;
}
sort(b+1,b+k+1);
for(int i=1;i<k;i++)
if(a[b[i]]>=a[b[i+1]]){
cout<<"impossible"<<endl;
return 0;
}
a[n+1]=-1;a[0]=1000000005;
for(i=1;i<=b[1];i++)
{
c[i]=1;
if(i>1){
for(j=1;j<i;j++)
if(a[j]<a[i])
c[i]=max(c[i],c[j]+1);
}
}
t+=c[b[1]];
for(i=n;i>=a[k];i--)
{
c[i]=1;
if(i<n){
for(j=n;j>i;j--)
if(a[j]>a[i])
c[i]=max(c[i],c[j]+1);
}
}
t+=c[b[k]];
for(int i=1;i<k;i++)
{
ss(b[i],b[i+1]);
}
cout<<t-k<<endl;
}
依次计算1-b[1],b[1]-b[2]---b[k-1]-b[k],b[k]=n之间最长不下降数列