#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N=2e5+10;

ll a[N];
ll sum[N];
int k[N];

#define F first 
#define S second 

set<pair<ll,int> >ss1;//first:临界条件 second:右端点 
set<int>ss2;//右端点 
set<int>::iterator it,it1,it2;
multiset<int>ss3;//线段长度 

ll val[N];
int ans[N];

int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	a[n]=-1e18;
	for(int i=1;i<=m;i++){
		scanf("%d",&k[i]);
	}
	for(int i=1;i<=n;i++){
		sum[i]=sum[i-1]+a[i];
		ss1.insert(make_pair(a[i]-1,i));
		ss2.insert(i);
		ss3.insert(1);
		val[i]=a[i]-1;
	}
	ss2.insert(0);
	for(int i=m;i>0;i--){
		//printf("%d\n",i);
		while(ss1.size()&&(*ss1.rbegin()).F>=k[i]){
			int r=(*ss1.rbegin()).S;
			it=ss2.lower_bound(r);
			it1=it; it2=it;
			it1--; it2++;
			int x=*it1,y=*it2;
			//printf("%d %d %d\n",x,r,y);
			ss3.erase(r-x);
			ss3.erase(y-r);
			ss3.insert(y-x);
			ss1.erase(make_pair(val[r],r));
			ss1.erase(make_pair(val[y],y));
			val[y]=(sum[y]-sum[x]-1)/(y-x);
			ss1.insert(make_pair(val[y],y));
			ss2.erase(r);
		}
		ans[i]=*ss3.rbegin();
	}
	for(int i=1;i<=m;i++){
		printf("%d%c",ans[i]-1,i==m? '\n':' ');
	}
	return 0;
}