#include <bits/stdc++.h>
using namespace std;
 
#define ll long long
#define pii pair<ll, ll>
#define fi first
#define sec second
#define ld long double
const int MAXN = 5e5;
const ll INF = 1e18;
const int MOD = 1e9 + 7;
const ld eps = 1e-6;
vector<ll> pos[MAXN + 5];
ll t[MAXN + 5], a[MAXN + 5];
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);		
	int tc = 1;	
	// cin >> tc;
	for(;tc--;){
		ll N, M; cin >> N >> M;
		for(int i = 1; i <= M; i++) cin >> t[i];
		for(int i = 1; i <= M; i++) cin >> a[i];
		vector<pii> intervals;
		for(int i = 1; i <= M; i++){
			intervals.push_back({a[i] - t[i], a[i] + t[i]});
		}
		sort(intervals.begin(), intervals.end(), [&](pii x, pii y){
			if(x.fi == y.fi) return x.sec > y.sec;
			return x.fi < y.fi;
		});
		
		set<ll> st;
		for(auto [l, r] : intervals){
			if(!st.size()){
				st.insert(r);
				continue;
			}
			auto x = st.lower_bound(r);
			if(x != st.end()) st.erase(x);
			st.insert(r);
		}
		
		cout << (ll)st.size() << "\n";
	}
}
/*
*/
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |