Link to this code: https://cses.fi/paste/af0c566bad71c1a7c62bff/
#include<bits/stdc++.h>

#define lli long long int
#define MOD 1000000007

using namespace std;

lli gcd(lli a, lli b);
lli binary_exp(lli a, lli b, lli mod);

class BIT{
	private:
		map<lli, lli> bit;
		lli size;
	public:
		BIT(lli n){
			size = n+1;
		}
		void update(lli idx, lli val){
			lli cur = idx + 1;
			while(cur < size){
				bit[cur] += val;
				cur += cur&(-cur);
			}
		}
		// returns [0, index] inclusive
		lli query(lli index){
			lli cur = index+1;
			lli res = 0;
			while(cur > 0){
				res += bit[cur];
				cur -= cur&(-cur);
			}
			return res;
		}

};

void solve(){
	lli n, q; cin >> n >> q;
	vector<lli> salary(n);
	for(int i=0;i<n;i++){
		cin >> salary[i];
	}
	lli MAX_VAL = 1000000000;
	BIT ft(MAX_VAL);
	for(int i=0;i<n;i++){
		ft.update(salary[i], 1);
	}
	while(q--){
		char com; cin >> com;
		if(com == '?'){
			lli a, b; cin >> a >> b;
			cout <<  ft.query(b) - ft.query(a-1) << endl;
		}
		else{
			lli k, x; cin >> k >> x;
			k--;
			ft.update(salary[k], -1);
			salary[k] = x;
			ft.update(salary[k], 1);
		}
	}
}

bool multitestcase = false;

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int testCase = 1;
	if(multitestcase) cin >> testCase;
	while(testCase--){
		solve();
	}
	return 0;
}

lli gcd(lli a,lli b) {
	if(b == 0) return a;
	return gcd(b, a%b);
}

lli binary_exp(lli a, lli b, lli mod){
	lli res = 1;
	while(b > 0){
		if(b&1){
			res = (res*a)%mod;
		}
		a = (a*a)%mod;
		b = b/2;
	}
	return res;
}