Example

Input

6 3
1 0 0 1 0 1
1 3 2


Output

1
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int N,M;
int a,b,si,ti,ti2;

int sw(int S,int i,int j){
  int I=(S>>i&1);
  int J=(S>>j&1);
  S-=(I<<i);
  S+=(J<<i);
  S-=(J<<j);
  S+=(I<<j);
  return S;
}

int d[(1<<16)];
int bfs(){
  for(int i=0;i<(1<<16);i++)d[i]=-1;
  queue<int> Q;
  Q.push(si);
  d[si]=0;
  while(!Q.empty()){
    int S=Q.front();Q.pop();
    if(S==ti||S==ti2){
      return d[S];
    }
    for(int i=0;i+1<N;i++){
      int to=sw(S,i,i+1);
      if(d[to]==-1){
	d[to]=d[S]+1;
	Q.push(to);
      }
    }
  }
}

int main(){
  cin>>N>>M;
  si=ti=ti2=0;
  for(int i=0;i<N;i++){
    cin>>a;
    si=si*2+a;
  }
  for(int i=0;i<M;i++){
    cin>>a;
    b=i%2;
    for(int j=0;j<a;j++){
      ti=ti*2+b;
      ti2=ti2*2+1-b;
    }
  }
  cout<<bfs()<<endl;
  return 0;
}