Example

Input

6 3
1 0 0 1 0 1
1 3 2


Output

1
#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
int p[20];
int q[20];
int bfs[1<<15];
int c[20];
int main(){
	int a,b;scanf("%d%d",&a,&b);
	int cnt=0;
	for(int i=0;i<a;i++){
		scanf("%d",p+i);
		if(p[i])cnt++;
	}
	for(int i=0;i<b;i++)scanf("%d",q+i);
	int L=0;
	int R=0;
	for(int i=0;i<b;i+=2)R+=q[i];
	for(int i=1;i<b;i+=2)L+=q[i];
	int ret=999999999;
	queue<int>Q;
	for(int i=0;i<(1<<a);i++)bfs[i]=-1;
	int st=0;
	for(int i=0;i<a;i++){
		st+=(1<<i)*p[i];
	}
	bfs[st]=0;Q.push(st);
	while(Q.size()){
		int at=Q.front();
		Q.pop();
		for(int i=0;i<a-1;i++){
			int to=at;
			if(at&(1<<i)){to-=(1<<i);to+=(1<<(i+1));}
			if(at&(1<<(i+1))){to-=(1<<(i+1));to+=(1<<i);}
			if(!~bfs[to]){
				bfs[to]=bfs[at]+1;
				Q.push(to);
			}
		}
	}
	if(L==cnt){
		int sz=0;
		for(int i=0;i<b;i++){
			for(int j=0;j<q[i];j++)c[sz++]=i%2;
		}
		int at=0;
		for(int i=0;i<a;i++)if(c[i])at+=(1<<i);
		ret=min(ret,bfs[at]);
		//printf("%d: %d\n",at,bfs[at]);
	}
	if(R==cnt){
		int sz=0;
		for(int i=0;i<b;i++){
			for(int j=0;j<q[i];j++)c[sz++]=!(i%2);
		}
		int at=0;
		for(int i=0;i<a;i++)if(c[i])at+=(1<<i);
		ret=min(ret,bfs[at]);
	//	printf("%d: %d\n",at,bfs[at]);
	}
	printf("%d\n",ret);
}